在c++中我们对数组的长度一直都很难确定,这也是一个困扰我们的问题,所以出现的指针,让我们动态的分配内存;但是这样易导致数组越界,导致程序崩溃;
这时我们的vector就出现了,关于vector我不想多说,我假设大家都了解temlplate 和 STL。各位在任何一本C++的书上都可以找的到这些内容的(如果没有,那赶快把它扔掉)。那为什么是vector呢?我们知道vector提供了operator[]函数,可以像数组一样的操作,而且还有边界检查,动态改变大小。(从这点上deque也是可以的)。vector本来就是可以用来代替一维数组的,同时vector<vector<E>>表示的是二维数组;
一:分析一下vector表示一维数组:
1.Constructors 构造函数
vector<int> v1; //构造一个空的vector
vector<int> v1( 5, 42 ); //构造了一个包含5个值为42的元素的Vector
2.Operators 对vector进行赋值或比较
C++ Vectors能够使用标准运算符: ==, !=, <=, >=, <, 和 >.
要访问vector中的某特定位置的元素可以使用 [] 操作符.
3.back() 返回最末一个元素
4.front() 返回第一个元素的引用
5.clear() 清空所有元素
6.insert(i) 插入元素到Vector中
7.pop_back() 移除最后一个元素
8.push_back(i) 在Vector最后添加一个元素
9.size() 返回Vector元素数量的大小
10.resize() 改变Vector元素数量的大小
二:分析vector<vector<>>表示二维数组:
申明:外部的vector下面将被1取代,内部的用2表示;
解释:一个存放vector元素的vector容器;
vector v1;
vector<vector<>> myarray; //注意myarray表示的是一个vector,所以可以使用上面的常用方法; 当然也可以用[][]表示一个二维数组;
myarray.push_back(v1); //表示向1中添加一个元素,同时表示二维数组的一行;
总结:vector<vector<>>声明的变量中可以无限的加入vector变量,所以它的行不定,同时vector中的大小也不定,所以列的大小也不相同;
一个运行的程序:
#include<iostream> #include<vector> using namespace std; void main(){ //Vector<Vector<>> //表示Vector中的元素是Vector, //所以向外面的Vector中放入Vector的个数为列的个数,即是外部的Vector的size,同时是二维数组的行, vector<int> v1 = vector<int>(3); cout << v1.size() << endl; vector <vector <int> > myarray; int a[10]; vector<int> b; for (int i = 0; i<10; i++) { a[i] = i; b.push_back(a[i]); } myarray.push_back(b);//注意myarray的实例是vector<int>,我搞错了 cout << myarray[0].back() << " " << myarray[0].front() << endl; for (vector<int>::iterator iter = myarray[0].begin(); iter != myarray[0].end(); iter++) { cout << *iter << endl; } cout << myarray.size() << endl; //代表行,也就是外面的Vector的元素的个数,也就是内部Vector的个数 cout << myarray[0].size() << endl; //代表内部第0个数组的长度 return ; }