1、用 vector 取代 C-style 的数组 提起数组,大家想必都很熟悉,你可以用索引和指针来操作数组,给程序设计带来了很大的灵活性。但是你知道它有许多天生的缺陷吗? 首先,数组的越界可能会引起程序的崩溃(如果崩溃了,还算你走运_)。其次是动态性不好,包括动态改变大小,动态申请。诸如此类的事,一定会让你伤透脑筋。有什么办法可以解决这些问题吗? 你不用担心,下面我来给大家介绍一种方法:用 vector 取代 C-style 的数组。 关于 vector 我不想多说,我假设大家都了解 temlplate 和 STL。各位在任何一本 C+的书上都可以找的到这些内容的(如果没有,那赶快把它扔掉 )。
2、那为什么是 vector 呢?我们知道 vector 提供了operator函数,可以像数组一样的操作,而且还有边界检查,动态改变大小。(从这点上 deque 也是可以的)。vector 本来就是可以用来代替一维数组的,这里只介绍用它来代替二维的数组。二维以上的可以依此类推。 我们知道,C+的 template 参数是可以嵌套定义的,你可以这样定义一个模板的 Instance vector array2(3);/注意和之间的空格。 这就是我们的关键,array2 可以保存 3 个向量,向量的长度是可以改变的。array2i返回的是第 i 个向量。同理,array2ij返回的是第 i 个向量中的
3、第 j 个元素。 问题到这里,你可能会得意的说:“我明白了,很简单吗!“ 。别急,还有一些细节问题:如下 vector array2(3); array212=9; 我保证你的程序会 segement failed,原因就是你没有指定向量的大小。用 push_back 函数可以解决问题:array21.push_back(9);但是好象不太爽。就不能用 operator吗?答案是肯定的。不过要多加几个步骤,如下: for(int i=0;i i nclude using namespace std; void main() vector array(3); for(int i=0;i3;i+)
4、 arrayi.resize(3);/设置数组的大小 3X3 /现在你可以和使用数组一样使用这个 vector for(int i=0;i3;i+) for(int j=0;j3;j+) arrayij=(i*j); /输出 for(int i=0;i3;i+) for(int j=0;j3;j+) coutarrayij“ “; coutendl; array.resize(5); arry3.resize(3); arry4.resize(3); /现在是 5X3 的数组了 for(int i=0;i5;i+) for(int j=0;j3;j+) arrayij=(i*j); for(int i=0;i5;i+) for(int j=0;j3;j+) coutarrayij“ “; coutendl;