C++ 11 新特性之容器相关特性.docxVIP

  1. 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
C11新特性之容器相关特性

这是C++11新特性介绍的第四部分,涉及到C++11这次更新中与容器有关的新特性。不想看toy code的读者可以直接拉到文章最后看这部分的总结。cbegin和cend原来的begin和end返回的iterator是否是常量取决于对应的容器类型,但是有时,即使容器不是常量类型,我们也希望获得一个const_iterator,以避免不必要的修改行为。C++11新标准中提供了cbegin和cend函数,无论容器类型,都固定返回const_iterator。vectorint c1 = {0, 1, 2, 3, 4};auto it1_1 = c1.begin();auto it1_2 = c1.cbegin();*it1_1 = 4;//*it1_2 = 5; // wrong, const iterators value cant be changed via this iterator.cout*it1_1\t*it1_2endl;标准库的begin和endC++11新标准提供了begin和end函数,可以对普通数组使用,获得头指针和尾指针。int c2[] = {0, 1, 2, 3, 4};auto it2_1 = begin(c2);auto it2_2 = end(c2);while(it2_1 != it2_2){cout*it2_1\t;it2_1++;}coutendl;新的赋值方式C++11允许使用一个{}包围的初始值列表来进行复制。如果等号左侧是个容器,那么怎么赋值由容器决定。vectorint c3;c3 = {0, 1, 2, 3, 4};for(auto it3_1 = c3.begin(); it3_1 != c3.end(); it3_1++)cout*it3_1\t;coutendl;initializer_listC++11新标准中新增了initializer_list类型,其实在之前介绍初始化的那篇文章中,使用vector v = {0, 1, 2, 3, 4}这种初始化形式时,就隐式的使用了initializer_list:每当在程序中出现一段以{}包围的字面量时,就会自动构造一个initializer_list对象。另外,initializer_list的另一个作用就在于作为函数的形参,这样的函数可以方便的传入以{}包围的不定长列表:void print_list(initializer_listint il){for(auto it = il.begin(); it != il.end(); it++){cout*it\t;//*it = 100; // wrong. initializer_list element is read-only.}coutendl;}print_list({0, 1, 2, 3, 4});print_list({0, 1, 2, 3, 4, 5});但是,需要注意的是,initializer_list中的元素是只读的。arrayC++11标准中提供了定长数组容器array,相比于普通数组更安全、更易使用。array是定长数组,所以不支持诸如插入、删除等改变容器大小的操作,但是可以对元素进行赋值改变其值。arrayint, 5 c4 = {0, 1, 2, 3, 4};c4[3] = 100; // cant insert since the array size is fixed.for(auto it4_1 = c4.begin(); it4_1 != c4.end(); it4_1++){cout*it4_1\t;}coutendl;forward_listC++11标准中增加了新的容器forward_list,提供了一个快速的、安全的单向链表实现。因为是单向链表,所以也就没有rbegin、rend一类的函数支持了。同样是因为单向链表的缘故,无法访问到给定元素的前驱,所以没有提供insert函数,而对应提供了一个insert_after函数,用于在给定元素之后插入节点。erase_after、emplace_after同理。forward_listint c5 = {3, 4};c5.push_front(2);c5.push_front(1);auto it5_1 = c5.before_begin();c5.insert_after(it5_1, 0);for(auto it5_2 = c5.begin(); it5_2 != c5.end(); it5_2++){cout*it5_2\t;}coutendl;swap新标准中提供了非成员版本的swap操作,此操作对array容器,会交换元素的值;对其他容器,则只交换容器的内部结构,并不进行元素值的

文档评论(0)

xcs88858 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

版权声明书
用户编号:8130065136000003

1亿VIP精品文档

相关文档