C++ 初读vector
vector
向量(Vector)是一个封装了动态大小数组的顺序容器(Sequence Container)。跟任意其它类型容器一样,它能够存放各种类型的对象。
Character
高效
C++标准要求vector在运行时高效快速地添加元素。既然能高效增长,那么定义长度也就没有多大必要了。事实上定义长度反而会降低性能,除非所有元素值一样(那你何不“重复定义初始化”)。一旦值不同,最好的办法还是创建空vector,然后push_back元素。
动态增长的副作用:不能使用范围for循环;可能使迭代器失效。
Initial
如何选择初始化
-
直接初始化
- 初始值已知且数量确定
- 是另一个对象的副本
-
创建空vector,然后push_back元素
- 数量不确定
代码演示
vector<string> sv; //默认初始化
vector<string> sa(sv); //副本初始化
vector<string> sb = sv; //同上
vector<string> sc(3, "hello"); //重复定义初始化
vector<string> sd = {"a", "b", "c"}; //列表初始化
vector<string> se(10); //值初始化
//()和{}
//()指示值数量,{}指示具体值
vector<int> ia(10); //有10个元素
vector<int> ib{10}; //初始值为10
vector<int> ic(10, 1); //10个1
vector<int> id{10, 1}; //10和1
Function
All the operation
操作 | 含义 |
---|---|
v.empty() | 为空?真:假 |
v.size() | (::size_type)元素个数 |
v.push_back() | 尾端插入元素 |
v[n] | return & |
v1 = v2 | 将v2元素拷贝到v1 |
v1 = | 将列表中的元素拷贝到v1中 |
v1 == v2 | 数量相同,元素相同 |
<,<=,>,>= | 以字典序比较 |
注:v.size()的返回同string一样,需要用dealtype(v.size())定义;v[n]返回的是引用。比较运算符取决于元素的值是否可以比较(自定义类需要重载运算符)。不能用下标添加元素,改值可以。
Pushelem
把一个值压(push)到vector对象的尾端。
如果循环体内部包含有向vector对象中添加元素的语句,就不能使用范围for循环。
string word;
vector<string> text;
while(cin>>word){
text.push_back(word);
}
Printelem
vector<string> text={"hello","world"};
for(decltype(text.size()) i=0;i!=text.size();++i)
{
cout<<text[i];
}
cout<<endl;