1.1 vector
vector是所有相同类型的对象的集合,它通过索引访问。vector通常和容器相关,因为vector包含对象。在使用vector时,需要先加入头文件
#include <vector>
using std::vector;
vector是一个模板,而不是一种类型。所说的vector类型是来自于它所包含的对象的类型,比如:
vector<int> a;
vector<Sales_item> sales_vec;
vector<vector<string>> str;
所以a是一个包含整形数据的向量;sales_vec是包含Sales_item这个自创类型的向量;str是一个包含字符向量的向量
我们不可以引用vector,因为引用本身不是对象;vector是包含对象的容器
对于二级向量vectord的定义,在较早的版本要在结尾的尖括号加上一个空格,便于编译器识别,像这样:
vector<vector<string> >; //在C++11之前的编译器这样才能识别
vector<vector<string>>; //现在可以直接这样写,但是较早版本的IDE可能不支持,需要写成上面的格式
1.2 vector的定义和初始化
定义:
vector<string> str; //初始化空的vector
vector<int> var1; //初始化空的vector
vector<int> var2 = var1; //将var1中的元素拷贝到var2中
vector<int> var3(var1); //将var1中的元素拷贝到var2中
vector<int> var4 = str; //ERR,这两个vector的类型不同
这个初始化在C++11之后才加入的,通过list来初始化vector
vector<string> names = {"nancy", "david", "simileciWH"};
vector<string> names2{"nancy", "david", "simileciWH"};
//注意括号和花括号的含义不同!!!
vector<string> names2("nancy", "david", "simileciWH"); //ERR
1.3 创建特殊个数的元素向量
vector<type> variable(count, value);
vector<int> a(10,-1); //10个整型的元素,每个元素都初始化为"-1"
vector<string> str(10); //10个字符串类型的元素,每一个都初始化为空字符串
1.4 在初始化vector时要注意
初始化的数据要与vector对应的类型匹配,
举个栗子:
vector<string> vv1{"hello"}; //v1有一个元素初始化为"hello"
vector<int> vv2("hello"); //ERR
vector<string> vv3{10}; //v3有10个元素,初始化为空字符串
vector<string> vv4{10,"hello"}; //v4有10个元素,全部初始化为"hello"
1.5 向vector中添加元素
在使用vector时,先定义一个空的vector(不指定vector的大小),而在运行过程中添加vector的值,这是非常高效的使用vector的方式
通过vector的成员 push_back来给vector添加元素, push_back通过获得当前的值,然后追加到vector最后一个元素中, 类似于python的append()。
举个栗子:
//创建一个包含0~99整型数的vector
vector<int> nums;
for(int i = 0; i < 99; i++)
nums.push_back(i);
1.6 vector的运算有哪些
vector operations | 含义 |
---|---|
v.empty() | 如果v为空返回true;否则false。 |
v.size() | 返回v的元素个数 |
v.push_back() | 向v添加元素 |
v[number] | 访问v中元素的方式 |
v1=v2 | 用v2替换v1中的元素 |
v = {a,b,c,…} | 将v中的元素替换成{}中的内容 |
v1==v2,v1!=v2 | 判断v1和v2中的元素个数和每个元素是否相等 |
<,<=,>,>= | 比较大小 |
举个栗子:
vector<int> v;
v = {1,2,3,4,5,6,7,8,9};
for(auto &i : v) i *= i;
for(auto i : v) cout << i << " ";
cout << endl;
执行结果:
1 4 9 16 25 36 49 64 81
Press <RETURN> to close this window...