8、顺序容器

1、顺序容器有vector(可变大小数组);deque(双端队列);list(双向链表);forward_list(单向链表);array(固定大小数组);string字符容器

2、通常vector是最好的选择,vector是模板而非类型;每个容器都包含一个头文件,文件名和类型名相同。

3、迭代器类似于指针

//定义迭代器类型iter,类型为list<string>中的iterator
list<string>::iterator iter;

list<string> a = {"Masa", "dfsf", "aeoko"};
auto it = a.begin();//it为list<string>::iterator类型 

4、定义一个array时除了指定元素类型,还要指定容器大小。array可以进行拷贝赋值操作,内置数组不可以

array<string, 10>::size_type i;

array<int, 4> digits = {0, 1, 2, 3};
array<int, 4> copy = digits;

//但是不能用一个花括号列表赋值
copy = {0,2,4,5};//错

5、向一个vector、string、deque插入元素会使之前所有指向容器的迭代器、引用、指针失效。

6、向容器中插入元素

list<int> a;
int b=1;
a.push_back(b);//后插
a.push_front(b);//前插

vector<string> s;
s.insert(s.begin(), "hello");//把hello插入到s.begin()之前
//insert返回值指向新插入的元素

7、front、back成员函数返回容器的首尾元素的引用,即就是操作首尾元素

//a = b
auto a = *c.begin();
auto b = c.front();

c.front() = 42;//直接改变容器中元素的值

8、删除容器中元素(forward_list例外,单链表支持insert_after、emplace_after、erase_after)

pop_back(),pop_front()  删除首尾元素;
erase(迭代器)  删除迭代器指定元素,返回最后一个删除元素之后的位置 

9、vector和string元素是连续存储的,容器预留一些空间作为备用来保存更多新元素。capacity告诉我们容器可以容纳多少元素;reserve通知容器应该准备保存多少个元素。resize成员函数只改变容器中元素的数目,而不是容器的容量。

10、string数值转换
这里写图片描述

11、顺序容器适配器(stack、queue、priority_queue(插入的元素不放在尾部,而是根据特定的优先级排列));适配器看做某种数据结构,可以把一些数据或其它数据结构嵌入其中。所有适配器都要求容器具有添加和删除元素的能力。

//str在vector上实现栈,初始化保存svec的拷贝
stack<string, vector<string>> str(svec);
//栈适配器
stack<int> intStack;
for(size_t i = 0; i != 10; ++i)
    intStack.push(i);
while(!intStack.empty()){
    int value = intStack.top();
    intStack.pop();
}

//队列适配器queue
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值