六一的部落格


关关难过关关过,前路漫漫亦灿灿。



类模板

存放某种给定类型的对象的可变长的序列

对象的集合,其中所有对象的类型都相同

集合中的每个对象都有一个与之对应的索引,索引用于访问对象


容器

如vector,因为其包含其他对象,所以称作容器


头文件和命名空间

1#include <vector>
2using std::vector;

构造函数

1vector<int> v;
2
3vector<vector<int> > vv;
4vector<vector<int>> vv2;

早期需要加空格

-
vector<T> v1 无元素
vector<T> v1 = {}
vector<T> v2(v1) 类型必须相同
vector<T> v2 = v1 类型必须相同
vector<T> v3(n, val) 显式构造函数; 包含n个重复的元素,每个元素都是val的拷贝;创建指定个数的元素
vector<T> v4(n) 显式构造函数; 包含n个元素,对元素进行值初始化
vector<T> v5{a, b, c} v5包含了若干个元素,且给出了这些元素的初始值;要求a,b,c的类型为T
vector<T> v5 = {a, b, c}

添加元素

  1. 向vector对象中添加元素

    1v1.push_back(i);
  2. vector对象能高效增长

    C++标准要求vector应该能在运行时高效快速地添加元素

    因此,初始化时若设置vector对象的大小,添加元素时反而会受限于此,除非设置所有元素的初始值相同(?)

  3. 不能在范围for循环中向vector对象添加元素

    选择向vector对象添加元素的迭代语句时,使用for要注意

  4. 任何一种可能改变vector对象容量的操作,如push_back,都会使vector对象的迭代器失效

    凡是使用了迭代器的循环体,都不要向迭代器所属的容器添加元素

 1vector<int> v;
 2for (int i = 0; i != 100; ++i)
 3{
 4    v.push_back(i);
 5}
 6
 7string word;
 8vector<string> text;
 9while (cin >> word)
10{
11    text.push_back(word);
12}

操作: 返回元素个数

-
vector<T>::size_type v.size()的返回类型; v[n]索引的类型
1v.size();

其他操作

-
v.empty()
v.begin()
v.end()
v.push_back(t) 向vector对象的末尾添加元素
v[n] 用于访问已存在的元素,而不能用于添加元素;只能对确知已存在的元素执行下标访问;其他容器可以通过下标添加元素
v1 = v2 拷贝替换
v1 = {a, b, c} 拷贝替换

只有当元素的值可比较时,vector对象才能被比较

-
v1 == v2 要求元素可判等;要求元素类型相同,对应位置的元素相同(数量相同)
v1 != v2

<, <=, >, >=

1v1 = {1, 2, 3, 4, 5};
2v2 = {1, 2, 3};
3v3 = {1, 5};

v1 > v2:相同位置元素相同,但v1元素较多,v1较大

v1 < v3,v2 < v3:相同位置元素不同,结果由单个元素的比较结果决定


遍历vector对象中的元素

 1vector<int> v{1, 2, 3, 4, 5, 6, 7, 8, 9};
 2
 3for (auto &i : v)
 4{
 5    // Process
 6}
 7
 8for (auto i : v)
 9{
10    // Process
11}

标准库类型vector


类模板

存放某种给定类型的对象的可变长的序列

对象的集合,其中所有对象的类型都相同

集合中的每个对象都有一个与之对应的索引,索引用于访问对象


容器

如vector,因为其包含其他对象,所以称作容器


头文件和命名空间

1#include <vector>
2using std::vector;

构造函数

1vector<int> v;
2
3vector<vector<int> > vv;
4vector<vector<int>> vv2;

早期需要加空格

-
vector<T> v1 无元素
vector<T> v1 = {}
vector<T> v2(v1) 类型必须相同
vector<T> v2 = v1 类型必须相同
vector<T> v3(n, val) 显式构造函数; 包含n个重复的元素,每个元素都是val的拷贝;创建指定个数的元素
vector<T> v4(n) 显式构造函数; 包含n个元素,对元素进行值初始化
vector<T> v5{a, b, c} v5包含了若干个元素,且给出了这些元素的初始值;要求a,b,c的类型为T
vector<T> v5 = {a, b, c}

添加元素

  1. 向vector对象中添加元素

    1v1.push_back(i);
  2. vector对象能高效增长

    C++标准要求vector应该能在运行时高效快速地添加元素

    因此,初始化时若设置vector对象的大小,添加元素时反而会受限于此,除非设置所有元素的初始值相同(?)

  3. 不能在范围for循环中向vector对象添加元素

    选择向vector对象添加元素的迭代语句时,使用for要注意

  4. 任何一种可能改变vector对象容量的操作,如push_back,都会使vector对象的迭代器失效

    凡是使用了迭代器的循环体,都不要向迭代器所属的容器添加元素

 1vector<int> v;
 2for (int i = 0; i != 100; ++i)
 3{
 4    v.push_back(i);
 5}
 6
 7string word;
 8vector<string> text;
 9while (cin >> word)
10{
11    text.push_back(word);
12}

操作: 返回元素个数

-
vector<T>::size_type v.size()的返回类型; v[n]索引的类型
1v.size();

其他操作

-
v.empty()
v.begin()
v.end()
v.push_back(t) 向vector对象的末尾添加元素
v[n] 用于访问已存在的元素,而不能用于添加元素;只能对确知已存在的元素执行下标访问;其他容器可以通过下标添加元素
v1 = v2 拷贝替换
v1 = {a, b, c} 拷贝替换

只有当元素的值可比较时,vector对象才能被比较

-
v1 == v2 要求元素可判等;要求元素类型相同,对应位置的元素相同(数量相同)
v1 != v2

<, <=, >, >=

1v1 = {1, 2, 3, 4, 5};
2v2 = {1, 2, 3};
3v3 = {1, 5};

v1 > v2:相同位置元素相同,但v1元素较多,v1较大

v1 < v3,v2 < v3:相同位置元素不同,结果由单个元素的比较结果决定


遍历vector对象中的元素

 1vector<int> v{1, 2, 3, 4, 5, 6, 7, 8, 9};
 2
 3for (auto &i : v)
 4{
 5    // Process
 6}
 7
 8for (auto i : v)
 9{
10    // Process
11}