c++中Vector的使用

    xiaoxiao2021-03-25  62

          在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 ; }

          

    转载请注明原文地址: https://ju.6miu.com/read-37946.html

    最新回复(0)