标准容类型vector:
首先,vector是一个相同类型的集合,存放相同类型的数据.要使用它的头文件<vector>,并且使用命名空间,usingstd::vector;引出c++类模板和函数模板.这里的vector是一个类模板.
模板本身不是类也不是函数,可以把模板看成是要生成类或者函数的一份说明.编译器根据模板创建类或者函数的过程称为实例化,也就是说需要指定模板需要转化成什么类型?
提供的信息:在模板名字后面加上一对尖括号.来指定需要实例化成什么类.
例:
vector
vector<int>ivec; //ivec保存int类型的对象
vector<Sales_item>Sales_vec; //Sales_vec中保存Sales_item这个对象
vector<vector<string>>file; //file中的元素是vector对象
1.1 定义和初始化vector
定义空vector:
vector <string>svec;
vector<int>ivec;
vector<int>ivec2(ivec); //ivec给ivec2拷贝
vector<int>ivec3= ivec; //ivec给ivec3拷贝
vector<string>svec(ivec2);//错误 拷贝类型不同
值初始化
vector<int>ivec(10); //10个元素,每个初始化为0
vector<string>svec(10); //10个元素,每个都是空string对象
vector<int>ivec = 10;//只能表示拷贝,不是指定向量的大小
列表初始化还是元素数量的时候?
可以使用(),{}来区分
vector<int>v1(10); //十个元素都是零
vector<int>v2{10}; //一个元素为10
vector<int>v3(10,1); //10个元素全为1
vector<int>v4{10,1}; //两个元素10和1
vector<string>v5{“hi”}; //一个字符串hi
vector<string>v6(“hi”); //错误
vector<string>v7{10}; //十个空字符串
vector<string>v8{10,”hi”}; //十个hi字符串
要做到值初始化vector必须要做到类型相同.
1.2向vector对象中添加元素
Example1:
vector<int>v2; //空vector对象
for(int i=0;i !=100;++i)
v2.push_back(i);//依次把整数放到v2尾端
分析:
这里push_back是vector的成员函数,push表示压,back表示'尾端',vector的优势在于不需要给定长度,可以动态的忘里面添加信息.
Example2:
string word;
vector<string>text;
while(cin>>word)
{
text.push_back(word);
}
建议:除非vector中所有元素都相同,否则使用未指定大小的vector动态添加.
注意:在给vector赋值的时候,不要使用范围的for,因为初始时,范围for指定了vector的上界.
1.3其他的vector操作
vector<int>v{1,2,3,4,5,6,7,8,9}
for(auto &i : v)//定义成引用类型,改变i值对它本身有影响.auto自动指定类型.
I *=i;
for (auto I:v)
cout<<i<<””;
cout<<endl;