vector的用法

vector相当于一个动态的数组,当程序员无法知道自己需要的数组的规模多大时,

用其来解决问题可以达到最大节约空间的目的.

就是常数很大,但要是开了O2,一切都不是问题。
就像数组一样,vector也采用的连续存储空间来存储元素。
也就是意味着可以采用下标对vector的元素进行访问,和数组一样高效。
但是又不像数组,它的大小是可以动态改变的,而且它的大小会被容器自动处理。

但是对于编程来讲,我们只会用就可以了。

NEXT,用法奉上。

1.vector的元素不仅仅可以是int,double,string,还可以是结构体,但是要注意:结构体要定义为全局的,否则会出错。

2.当然,要有头文件#include<vector>

3.我们以vector<int>a;为例

基本上包含了vector的常用函数(不够再补)

 1 #include<bits/stdc++.h>
 2 #define ll long long
 3 #define DB double
 4 using namespace std;
 5 const int tmp=100;
 6 vector<int>a;//创建vector对象
 7 vector<int>b(6,9);
 8 /*vector的声明及初始化 
 9 vector<int> a;        //声明一个int型向量
10 vector<int> a(5);     //声明一个初始大小为5的int向量
11 vector<int> a(10, 1); //声明一个初始大小为10且值都是1的向量
12 vector<int> a(tmp);   //声明并用tmp向量初始化vec向量
13 vector<int> tmp(a.begin(), a.begin() + 3);  //用向量vec的第0个到第2个值初始化tmp
14 int arr[5] = {1, 2, 3, 4, 5};   //下标依旧是从0开始 
15 vector<int> a(arr, arr+ 5);      //将arr数组的元素用于初始化vec向量
16 //说明:当然不包括arr[4]元素,末尾指针都是指结束元素的下一个元素,
17 //这个主要是为了和vec.end()指针统一。
18 vector<int> vec(&arr[1], &arr[4]); //将arr[1]~arr[4]范围内的元素作为vec的初始值
19 */ 
20 int main()
21 {
22     for(int i=11;i<=20;++i) a.push_back(i);//尾部插入数字,下标从0开始 
23     cout<<a.front()<<endl;//传回第一个数据 
24     cout<<a.back()<<endl;//传回最后一个数据
25     cout<<a.capacity()<<endl;//返回容器当前能够容纳的元素数量
26     cout<<a.size()<<endl;//返回当前容器中实际的元素个数
27     cout<<a.empty()<<endl;//判断容器是否为空,空是1,非空是0
28     cout<<a.max_size()<<endl;//返回容器可以存储的最多元素数目 
29     for(int i=0;i<a.size();++i) cout<<a.at(i)<<" ";cout<<endl;//a.at(i)得到编号位置的数据
30     /*****************************************************************************************/
31    /* lower_bound(a.begin(),a.end(),x) 返回>=x的第一个数的下标(指针)
32       upper_bound(a.begin(),a.end(),x) 返回>=x的第一个数的下标(指针)
33   *************************************************************************************************/
34     for(int i=1;i<=10;++i) cout<<a[i-1]<<" ";cout<<endl;//使用下标访问元素 
35     std::vector<int>::iterator it;
36     for(it=a.begin();it!=a.end();++it) cout<<*it<<" ";cout<<endl;//使用迭代器访问元素 
37     /*a.begin()           返回指向容器第一个元素的迭代器
38     a.end()             返回指向容器最后一个元素的迭代器*/
39     /******************************************************************************************/
40     a.insert(a.begin()+4,211);//a.insert(a.begin()+i,a);在第i个元素后面插入a;传回新数据位置的迭代器 
41     for(it=a.begin();it!=a.end();++it) cout<<*it<<" ";cout<<endl;
42     a.insert(a.begin()+5,3,985);
43     for(it=a.begin();it!=a.end();++it) cout<<*it<<" ";cout<<endl;
44     /****************************************************************************************/
45     a.erase(a.begin()+4);//a.erase(a.begin()+i);删除第i+1个元素;传回下一个数据的位置的迭代器 
46     for(it=a.begin();it!=a.end();++it) cout<<*it<<" ";cout<<endl;
47     a.erase(a.begin()+1,a.begin()+4);//a.erase(a.begin()+i,a.end()+j);删除区间[i,j-1];区间从0开始;传回下一个数据的位置的迭代器 
48     for(it=a.begin();it!=a.end();++it) cout<<*it<<" ";cout<<endl;
49     /***********************************************************************************************/
50     a.pop_back();//删除最后一个数据
51     for(it=a.begin();it!=a.end();++it) cout<<*it<<" ";cout<<endl;
52     vector<int>::reverse_iterator p;
53     for(p=a.rbegin();p!=a.rend();++p) cout<<*p<<" ";cout<<endl;
54     /*a.rbegin() 传回一个逆向的第一个数据的迭代器 
55     a.rend() 传回一个逆向的最后一个数据的下一个位置的迭代器 */
56     /**************************************************************************************************/
57     a.resize(6);//重新指定队列的长度,即只剩前六个元素,剩下的元素都删除了 
58     for(it=a.begin();it!=a.end();++it) cout<<*it<<" ";cout<<endl;
59     a.reserve(100);//增加队列容量,就是reserve增加的空间未被初始化不能引用
60     cout<<a.size()<<endl;
61     /***********************************************************************************************/
62     swap(a[3],a[0]);//交换队列中的两个元素 
63     for(it=a.begin();it!=a.end();++it) cout<<*it<<" ";cout<<endl;
64     a.clear(); cout<<a.size()<<endl;//a.clear();清除a中的内容 
65     a.swap(b);//交换a,b,两个向量的内容 
66     for(it=a.begin();it!=a.end();++it) cout<<*it<<" ";cout<<endl;
67     cout<<b.size();
68     return 0;
69 }
原文地址:https://www.cnblogs.com/adelalove/p/11706693.html