• C++ vector介绍


    <span style="font-family: Arial; ">在此总结一下模板vector的使用介绍</span>

      标准库vector类型使用需要的头文件:#include <vector>。vector 是一个类模板。不是一种数据类型,vector<int>是一种数据类型。它比数组更加方便使用。

    一、 vector定义和初始化

    • vector< 类型 > 标识符(最大容量,初始所有值);例如 vector<int> vi(10,2)      //有十个元素,初始值都是2
    • vector< typeName > vi(n); //vi含有n个值为0的元素  例如 vector<int> vi(10)    //有十个元素,初始值都是该容器的默认值,整形是0
    • vector<typeName>v2(v1); 或v2=v1;或vector<typeName> v2(v1.begin(), v1.end());//v2是v1的一个副本
    • vector< typeName > v1;       //默认v1为空,
    • int a[4]={0,1,2,3}; vector<int> v5(a,a+5);//v5的size为5,v5被初始化为a的5个值。后一个指针要指向将被拷贝的末元素的下一位置。
    • 还有一种较为特殊,列表初始化(使用中括号来初始化)  vector<int> v{10};     //模板只有一个元素,初始值为10,此种方法一定要和值初始化(使用圆括号初始化分别开),此定义模板方法在只有C++11的规则下才可以

    二、vector中压入元素,输出元素操作

           我们可以在程序运行时压入元素,此时我们要使用  push_back()语句

    •        vector<string> str;
      string text;
      while(cin>>text)
      {
      str.push_back(text);
      }  //各元素之间以空白字符为间隔(制表符,空格,回车 都是空白字符)
    • 压入元素后我们就要输出它,此时我们可以利用C++迭代器来一次遍历的输出它

            (1)vector<int> vi;
    for(int i=0;i<100;i++)
                 vi.push_back(i);    //压入一百个与元素

            auto i=vi.size();            //size(),返回模板中元素的个数 (下面三.3有解释)

        cout<<i<<endl;   

            for(auto b=vi.begin();b<vi.end();b++)     //使用C++迭代器
        cout<<*b<<endl; 

            (2)我们还可以使用下标来输出,例如

               for(int i=0;i<vi.size();i++)  //使用下标输出
    cout<<vi[i]<<endl;

    三  对vector操作的一些函数

    1.   v[n]           返回v中位置为n的元素
    2.  v.empty()     判断vector是否为空
    3.  v.size()        返回容器中数据的个数,size返回相应vector类定义的size_type的值。我们可以使用auto类型,从而不必担心我们定义的类型(上面程序有演示)  
    4.  v.pop_back()    删除容器的末元素,并不返回该元素。
    5. v.push_back(t)    在容器的最后添加一个值为t的数据,容器的size变大。
    6. v.erase(pointer1,pointer2) 删除pointer1到pointer2中间(包括pointer1所指)的元素。
    7. v.resize(2*v.size, 10) 将v的容量翻2倍(并把新元素的值初始化为10)
    8. v1==v2          判断v1与v2是否相等。!=、<、<=、>、>=      保持这些操作符惯有含义(使用的逻辑和普通的一样,我们可以对比C++string)
    9. v.clear()      删除容器中的所有元素。
          下面根据以上的函数,编写一个程序当用例,使用起来更加清晰
          
    #include<iostream>
    #include<string>
    #include<vector>
    #include<cctype>
    using namespace std;
    int main()
    {
    	
    
    	vector<int> vi;
    	for(int i=0;i<20;i++)
    		vi.push_back(i);                   //压入元素。向模板的底端
    	
    	
    	decltype(vi.size()) size=vi.size();    
    	//使用decltype 定义一个与vi.size()类型一样的变量 ,模板中对象的个数
    	cout<<"the vector's capacity is"<<size<<endl;  
    	
    	
    	vi.pop_back();  //删除容器中最后一个元素 19
    	for(auto i=vi.begin();i!=vi.end();i++) //输出模板中的元素
    		cout<<*i<<endl;
    	for(int i=0;i<19;i++)  //使用下标输出
    		cout<<vi[i]<<endl;
    
    	vi.resize(vi.size()*2,12);//长度变成两倍,并主动为后增加的赋值为12
    	cout<<"NOW the vector's capacity is"<<vi.size()<<endl;
    	for(auto i=vi.begin();i!=vi.end();i++)
    		cout<<*i<<endl;
    
    	
    	vi.clear();  // 删除容器中的所有元素
    	cout<<"After clear , the vector's capacity is"<<vi.size()<<endl;
    	
    	
    	//使用C++迭代器类型遍历每一个元素
    	vector<string> s(10,"hello");
    	vector<string>::iterator i;
    	for(i=s.begin();i!=s.end();i++)
    		cout<<*i<<endl;
    	s.pop_back();  //删除容器中最后一个元素
    	cout<<"After pop_back , the vector's capacity is"<<s.size()<<endl;
             
    
    
    	return 0;
    
    }
    以上部分结果截图如下







     关于vector的迭代器类型
    1. 每种容器类型都定义了自己的迭代器类型,如vector:
      vector<int>::iterator iter;这条语句定义了一个名为iter的变量,它的数据类型是由vector<int>定义的iterator类型。
    2. 使用迭代器读取vector中的每一个元素:
      vector<int> ivec(10,1);
      for(vector<int>::iterator iter=ivec.begin();iter!=ivec.end();++iter)
      {
         cout<<*iter<<endl;; //使用 * 访问迭代器所指向的元素
      }
              我们可以定义vector<int>::iterator,同时我么也可以定以如下 vector<int>:: const_iterator ,只能读取容器中的元素,而不能修改。
    iterator除了进行++,--操作,可以将iter+n,iter-n赋给一个新的iteraor对象。还可以使用一个iterator减去另外一个iterator.
    const vector<int>::iterator newiter=ivec.begin();
    vector<int>::iterator newiter2=ivec.end();
    cout<<" "<<newiter2-newiter; 
    一个完整的程序
    1 #include <vector>
    2 #include <iostream>
    3 
    4 using namespace std;
    5 
    6 int main() {
    7 vector<int> ivec;
    8 ivec.push_back(1);
    9 ivec.push_back(2);
    10 ivec.push_back(3);
    11 ivec.push_back(4);
    12 
    13 for(vector<int>::iterator iter = ivec.begin();1. iter != ivec.end(); ++iter)
    14 cout << *iter << endl;
    15 }


    以上是vector的一些使用的知识点,希望对大家有用微笑

  • 相关阅读:
    MySQL表行数查询最佳实践
    mysqldump备份表中有大字段失败的排错过程
    μC/OSⅡ在C8051F060上的移植及其应用
    OSSchedLock()函数透析
    32位与64位区别
    【Cesium】Animation显示系统时间
    【Cesium】根据经纬度计算距离
    【Cesium】 鼠标拾取椭球、地形、模型坐标点(经度+纬度+高程)
    【Python学习】Selenium模拟浏览器抓取数据
    【Cesium】polygon中的height和extrudedHeight的区别
  • 原文地址:https://www.cnblogs.com/zhangruilin/p/5769846.html
Copyright © 2020-2023  润新知