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 }
原文地址:https://www.cnblogs.com/wenzhixin/p/8503909.html