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 = {a,b,c} 将列表中的元素拷贝到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(dealtype(text.size()) i=0;i!=text.size();++i)
{
    cout<<text[i];
}
cout<<endl;

猜你喜欢

转载自www.cnblogs.com/goodswarm/p/10539895.html