C++ primer 学习笔记 第9章 顺序容器 9.3 顺序容器操作

本文详细介绍了C++ STL中顺序容器的操作,包括向vector、string、deque、list等容器中添加元素的方法,如push_back、push_front和insert,以及访问、删除元素和改变容器大小的操作。特别强调了容器操作可能使迭代器失效的问题。

9.3 顺序容器操作

9.3.1 添加元素

向vector、string、deque中插入元素,会使指向容器的迭代器、引用、指针失效。

在vector或string尾部之外位置,deque首尾之外位置添加元素,都需要移动元素。

 

list、vector、deque、string支持push_back。

放入容器的是对象值的一个拷贝,而不是对象本身。

 

list、forward_list、deque支持push_front。deque具有随机访问元素的能力。

 

vector、deque、list、string支持insert。

slist.insert(slist.begin(),"hello!") ;

insert 接受迭代器为第一个参数,将元素插入至迭代器之前。

svec.insert(svec.end(), 10, "anna");

接受一个元素数目和一个值。

slist.insert(slist.begin(),v.end()-2, v.end());

接受一对迭代器或一个初始化列表,迭代器不能指向添加元素的目标容器。

C11标准中接受元素个数或范围的版本,返回指向第一个新加入元素的迭代器,老版本返回void。

 

C11新标准中引入了emplace_front、emplace和emplace_back,与insert等的不同之处在于它可以在容器中直接构造元素,传递给emplace函数的参数必须与元素类型的构造函数相匹配。

 

9.3.2 访问元素

若容器中没有元素,访问操作是未定义的。

at和下标操作只适用于string、vector、deque、array

back不适用于forward_list

如果下标越界,at会抛出一个out_of_range异常。

 

9.3.3 删除元素

会改变容器大小,不适用于array。

vector和string不支持pop_front,forward_list不支持pop_back。这些操作返回void。

c.erase(p),删除迭代器p指定的元素,返回被删元素之后元素的迭代器。若为尾后迭代器,则未定义。

c.erase(b,e),删除迭代器b和e指定范围的元素,若e为尾后迭代器,则返回尾后迭代器。

 

9.3.4 forward_list

没有定义insert、emplace、erase,定义了insert_after、emplace_after、erase_after。

lst.before_begin()返回指向首元素之前不存在元素的迭代器。

 

9.3.5 改变容器大小

不适用于array,resize操作接受一个可选的元素值参数,若未提供,新元素进行值初始化。

 

9.3.6 容器操作可能会使迭代器失效

不要保存end返回的迭代器。

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值