zoukankan      html  css  js  c++  java
  • vector向量容器(常用的使用方法总结)

    关于STL中vector容器的学习,编译运行后边看代码,边看执行结果效果更佳,还是想说看别人的代码一百遍,不如自己动手写一遍。

    vector向量容器不但能像数组一样对元素进行随机访问,还能随时在尾部插入元素,简单而高效,能够完全替代数组。

    vector最大的亮点在于具有内存自动管理的功能,插入和删除元素时能够动态调整所占的内存空间。

    值得注意的是,vector容器中的两个重要方法,begin()返回的是首元素位置的迭代器,end()返回的是最后一个元素的下一个元素位置的迭代器。

      1 //关于STL中vector容器的学习,编译运行后边看代码,边看执行结果效果更佳,不过看别人的代码一百遍,不如自己动手写一遍 
      2 #include <vector>//头文件
      3 #include <iostream>
      4 #include <algorithm>
      5 using namespace std;
      6 
      7 void print(vector <int> v);
      8 bool mycmpare(const int &a, const int &b){
      9     return a>b;
     10 }
     11 int main ()
     12 {
     13     //创建vector对象三种常用的方式,此处存储元素类型是int,还可以是double、char、long long等基本数据类型,甚至是string基本字符序列容器 
     14     vector <int> v1;//不指定容器的元素个数的定义一个用来存储整型的向量容器
     15     cout<<"v1:"<<endl; 
     16     print(v1);
     17     /*运行结果
     18         v1:
     19     大小为:0
     20     */ 
     21     
     22     vector <int> v2(5);//指定容器的元素个数的定义一个大小为10的用来存储整型的向量容器,默认初始化为0
     23     cout<<"v2:"<<endl;
     24     print(v2);
     25     /*运行结果
     26     v2:
     27     大小为:5
     28     0 0 0 0 0
     29     */
     30     
     31     vector <int> v3(5,1);//也可指定初始值,此处指定为1
     32     cout<<"v3:"<<endl;
     33     print(v3); 
     34     /*运行结果
     35     v3:
     36     大小为:5
     37     1 1 1 1 1
     38     */
     39     
     40     //另外事先指定不指定大小都无所谓,指定了大小也可以随时使用push_back()对vector容器进行尾部扩张
     41     v1.push_back(1);//向空的vector容器尾部扩张,追加元素为1
     42     cout<<"v1:"<<endl; 
     43     print(v1); 
     44     v3.push_back(2);//向已有元素的vector容器尾部扩张,追加元素为2
     45     cout<<"v3:"<<endl;
     46     print(v3);
     47     /*运行结果
     48     v1:
     49     大小为:1
     50     1
     51     
     52     v3:
     53     大小为:6
     54     1 1 1 1 1 2
     55     */
     56     
     57     //插入元素使用insert()方法,要求插入的位置是迭代器的位置,而不是元素的下标
     58     v3.insert(v3.begin(),3);//在最前面插入3
     59     cout<<"v3:"<<endl;
     60     print(v3);
     61     
     62     v3.insert(v3.end(),3);//在末尾追加3,此处等同于push_back()
     63     cout<<"v3:"<<endl;
     64     print(v3);
     65     /*运行结果
     66     v3:
     67     大小为:7
     68     3 1 1 1 1 1 2
     69     
     70     v3:
     71     大小为:8
     72     3 1 1 1 1 1 2 3
     73     */
     74      
     75     int i;
     76     for(i=0;i < v3.size();i++){//只可赋值到已扩张位置 
     77         v3[i]=i;
     78     }
     79     //要删除一个元素或者一个区间中的所有元素时使用erase()方法
     80     v3.erase(v3.begin()+2);//删除第2个元素,从0开始计数
     81     cout<<"v3:"<<endl;
     82     print(v3); 
     83     /*运行结果
     84     v3:
     85     大小为:7
     86     0 1 3 4 5 6 7
     87     */
     88     v3.erase(v3.begin()+1,v3.begin()+3);//删除第1个到第3个元素区间的所有元素
     89     cout<<"v3:"<<endl;
     90     print(v3);
     91     /*运行结果
     92     v3:
     93     大小为:5
     94     0 4 5 6 7
     95     */
     96     //由结果可知,erase()方法同insert()方法一样,操作的位置都只是迭代器的位置,而不是元素的下标
     97     
     98     //要想清空vector(),使用clear()方法一次性删除vector中的所有元素
     99     cout<<"v2:"<<endl;
    100     print(v2);
    101     /*运行结果
    102     v2:
    103     大小为:5
    104     0 0 0 0 0
    105     */
    106     v2.clear();
    107     if(v2.empty()) cout<<"v2经过使用clear()方法后为空
    "; 
    108     print(v2);
    109     /*运行结果
    110     v2经过使用clear()方法后为空
    111     大小为:0
    112     */
    113     
    114     //要想将向量中某段迭代器区间元素反向排列,则使用reverse()反向排列算法,需要添加algorithm头文件 
    115     cout<<"v3反向排列前:"<<endl;
    116     print(v3);
    117     reverse(v3.begin(),v3.end());//全部反向排列 
    118     cout<<"v3反向排列后:"<<endl;
    119     print(v3); 
    120     /*运行结果
    121     v3反向排列前:
    122     大小为:5
    123     0 4 5 6 7
    124     
    125     v3反向排列后:
    126     大小为:5
    127     7 6 5 4 0
    128     */
    129     
    130     //要想将向量中某段迭代器区间元素进行排序,则使用sort()算法
    131     cout<<"v3升序排列前:"<<endl;
    132     print(v3); 
    133     sort(v3.begin(),v3.end());//默认升序排列
    134     cout<<"v3升序排列后:"<<endl;
    135     print(v3);
    136     /*运行结果
    137     v3升序排列前:
    138     大小为:5
    139     7 6 5 4 0
    140     
    141     v3升序排列后:
    142     大小为:5
    143     0 4 5 6 7
    144     */
    145     
    146     //自定义排序比较函数,此处降序
    147     cout<<"v3降序排列前:"<<endl;
    148     print(v3);
    149     sort(v3.begin(),v3.end(),mycmpare); 
    150     cout<<"v3降序排列后:"<<endl;
    151     print(v3);
    152     /*运行结果
    153     v3降序排列前:
    154     大小为:5
    155     0 4 5 6 7
    156     
    157     v3降序排列后:
    158     大小为:5
    159     7 6 5 4 0
    160     */
    161 } 
    162 
    163 void print(vector <int> v) 
    164 {
    165     //cout<<"下标方式访问:"<<endl;
    166     cout<<"大小为:"<<v.size()<<endl; 
    167     int i;
    168     for(i=0;i< v.size();i++){
    169         cout<<v[i]<<' ';
    170     }
    171     cout<<endl<<endl;
    172     
    173     /*cout<<"用迭代器访问:"<<endl;
    174     //定义迭代器变量it,类型与容器元素类型保持一致 
    175     vector<int>::iterator it; 
    176     for(it=v.begin(); it != v.end(); it++){
    177         cout<<*it<<' ';
    178     }
    179     cout<<endl<<endl;*/
    180 }
  • 相关阅读:
    iOS新建项目基础设置
    Burp安装及配置(修改参数测试)
    打开他人代码,如何运行起来
    四、python用户交互程序
    三、python_字符编码与二进制
    二、python_变量要求
    一、python_(入门)
    linux 常用命令之一
    Atcoder Regular Contest 093 C
    「HNOI2016」序列
  • 原文地址:https://www.cnblogs.com/wenzhixin/p/8503909.html
Copyright © 2011-2022 走看看