顺序容器类型:

vector    可变大小数组。支持快速随机访问。在尾部之外的位置插入或删除元素可能很慢

deque    双端队列。支持快速随机访问。在头尾位置插入/删除速度很快

list       双向列表。只支持双向顺序访问。在 list 中任何位置进行插入/删除操作速度都很快

forward_list   单向链表。只支持单向顺序访问。在链表任何位置进行插入/删除操作都很快

array      固定大小数组。支持快速随机访问。不能添加或删除元素

string     与 vector 相似的容器,但专门用于保存字符。随机访问快。在尾部插入/删除速度很快

 

容器操作(后面再提具体每个容器操作对元素的其他限制):

类型别名

iterator      此容器的迭代器类型

const_iterator      可以读取元素,但不能修改元素的迭代器类型

size_type       无符号整数类型,足够保存此种容器类型最大可能容器大小

difference_type   带符号整数类型,足够保存两个迭代器之间的距离

value_type     元素类型

reference       元素的左值类型,与 value_type& 含义相同

const_reference  元素的 const 左值类型,即 const value_type&

构造函数

C c;        默认构造函数,构造空容器

C c1(c2);     构造 c2 的拷贝 c1

C c(b, e);     构造 c,将迭代器 b 到 e 指定的范围内的元素拷贝到 c(array 不支持)

C c{a, b, c, d...}   列表初始化 c

赋值与 swap

c1 = c2;       将 c1 中的元素替换为 c2 中的元素

c1 = {a, b, c, d...}   将 c1 中的元素替换为列表中元素(不适用于 array)

a.swap(b);      交换 a 和 b 的元素

swap(a, b);     等价于 a.swap(b)

大小

c.size();       c 中元素的数目(不支持 forward_list)

c.max_size();   c 中可保存的最大数目的元素数目

c.empty();      若 c 中存储了元素,返回 false,否则返回 true

添加/删除元素(不适用于 array)

注:在不同容器中,这些操作的接口都不同

c.insert(args);   将 args 中的元素拷贝进 c

c.emplace(inits); 使用 inits 构造 c 中的一个元素

c.erase(args);   删除 args 指定的元素

c.clear();      删除 c 中所有元素,返回 void

关系运算符

==,!=      所有容器都支持

<,<=,>,>=    关系运算(无序关联容器不支持)

获取迭代器

c.begin(),c.end()  返回 c 的首元素和尾元素之后位置的迭代器

c.cbegin(),c.cend() 返回 const_iterator

 

反向容器的额外成员(不支持 forward_list)

reverse_iterator       按逆序寻址元素的迭代器

const_reverse_iterator 不能修改元素的逆序迭代器

c.rbegin(),c.rend()      返回指向 c 尾元素和首元素之前位置的迭代器

c.crbegin(),c.crend()   返回 const_reverse_iterator

 

虽然我们可以在容器中保存几乎任何类型,但某些容器操作对元素类型有自己的特殊要求。我们可以为不支持特定操作需求的类型定义容器,但这种情况下就只能使用那些没有特殊要求的容器操作了:

 1 #include <iostream>
 2 #include <vector>
 3 using namespace std;
 4 
 5 class no_default{//no_default 是一个没有默认构造函数的类型
 6     int x;
 7 public:
 8     no_default(int a) : x(a){}
 9     ~no_default(){}
10 };
11 
12 int main(void){
13     int init = 1;
14     std::vector<no_default> v1(10, init);//正确,提供了元素初始化器(执行结果是v1中有10个1)
15     // std::vector<no_default> v2(10);//错误,必须提供一个元素初始化器
16     return 0;
17 }
View Code

相关文章:

  • 2022-12-23
  • 2021-07-02
  • 2021-08-29
  • 2021-07-17
  • 2021-12-11
  • 2021-10-06
猜你喜欢
  • 2021-10-16
  • 2021-12-13
  • 2021-06-27
  • 2021-10-20
  • 2021-07-27
相关资源
相似解决方案