c++中vector的一些基本操作

在c++中,vector是一个类模板,当使用模板的时候,我们需要指出编译器应该把类和函数实例化成何种类型。
比如:

vector<int> ivec;
vector<sales_item> Sales_vec;
vector<vector<string>> file;//该向量的元素是vector对象

1定义和初始化vector对象

vector<T> v1;//v1是一个空vector,它潜在的元素是T类型的,执行默认初始化
vector<T> v2(v1);//v2中包含v1所有元素的副本
vector<T> v2=v1;//等价于v2(v1),v2中包含有v1所有元素的副本
vector<T> v3(n,val);//v3中包含着n个重复的元素
vector<T> v4(n);//v4包含了n个重复执行值初始化的对象
vector<T> v5{a,b,c...};//v5包含了初始值个数的元素,每个元素被赋予相应的初始值
vector<T> v5={a,b,c};//等价于上一个

其中,v4初始化时元素的类型必须支持默认初始化,我们就必须提供初始化的元素值。
2列表初始化

vector<string> v5{"hi"};//列表初始化:v5有一个元素
vector<string> v6("hi");//错误,不可以用元素值来构建vector对象
vector<string> v7{10};//v7有10个默认初始化的元素
vector<string> v8{10,"hi"};//v8有10个值为hi的元素

花括号里的值必须和元素类型相同,显然10并不是string类型,此时编译器会尝试用默认初始化来初始化vector对象
3向vector对象中添加元素
当向vector里添加总量较大的数时,我们就可以使用push_back操作,可以向其末尾添加元素,

vector<int> v2;
for(int i=0;i!=100;++i)
{
    v2.push_back(i);
}

有时不知道确切的元素数量,需要实时读取数据然后将其赋予vector对象。

string word;
vector<string> text;
while(cin>>word)
     text.push_back(word);

c++标准要求vector元素能够快速的增长,开始的时候创建空的对象,然后再运行时动态地添加元素,这样的效率会更加的高。
范围for语句中不可以改变其遍历序列的大小
4其他的vector操作

//vector支持的操作
v.empty();//vector为空的时候返回真
v.size();//返回v中元素的个数
v.push_back;//向v的尾端添加一个值为t的元素
v[n];//返回第n个元素
v1=v2;//用v2元素中的拷贝替换v1中的元素
v1={a,b,c..}//用列表中的元素拷贝替换v1的元素
v1==v2;
v1!=v2;
<,<=,>,>=;//以字典顺序比较大小

访问vector对象中元素的方法和访问string对象中字符的方法差不多,例如可以使用范围语句处理vector对象中所有的元素

vector<int> v{1,2,3,4,5,6,7,8,9};
for(auto &i:v)
    i*=i;//i 时一个引用,求元素的平方值
for(auto i:v)
    cout<<i<<" ";//输出该元素
cout<<endl;

第一个循环把控制变量i定义成引用类型,这样就能通过i给v的元素赋值,其中i的类型有auto关键字所指定。
注意:vector对象不可以以下标形式来添加元素,只可以对已经存在的元素进行下标操作。

猜你喜欢

转载自blog.csdn.net/shine10076/article/details/82723748