博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
forward_list学习之insert_after,emplace_after, push_fron, emplace_front,resize操作
阅读量:2193 次
发布时间:2019-05-02

本文共 3524 字,大约阅读时间需要 11 分钟。

本篇学习forward_list添加元素操作

insert_after:在某个元素后插入新元素

emplace_after:在元素后原位构造元素

push_front:插入元素到容器起始

emplace_front:在容器头部就地构造元素

resize:改变容器中可存储元素的个数

代码实现

#include 
#include
#include
using namespace std;class Person2{public: Person2(string name): m_strName(name) { } string m_strName;};void addElement(){ forward_list
list1; string strName = "《出塞(王昌龄)》秦时明月汉时关,万里长征人未还。但使龙城飞将在,不教胡马度阴山。"; Person2 person(strName); //int = [-2147483648, 2147483647] const int count = 214748;//2147483648 //在链表头插入元素 double startTime1 = clock();//1计算开始 for(int i = 0; i < count; i++)//214748 { list1.push_front(strName); } double endTime1 = clock();//1时间结束 list1.clear(); cout << "for 1 run time is: " << (double)(endTime1 - startTime1) / CLOCKS_PER_SEC << "s" << endl; cout << endl; forward_list
list2; double startTime2 = clock();//2计算开始 for(int i = 0; i < count; i++)//214748 { list2.emplace_front(strName); } double endTime2 = clock();//2时间结束 list2.clear(); cout << "for 2 run time is: " << (double)(endTime2 - startTime2) / CLOCKS_PER_SEC << "s" << endl; cout << endl; //在pos位置之后插入元素 forward_list
list = {75,76,77,78}; forward_list
list3; list3.assign({23, 26, 28}); cout << "list3的值为:" << endl; for(auto &val: list3) { cout << val << "\t"; } cout << endl; //向list3第一个元素之后插入60这个元素 list3.insert_after(list3.begin(), 60); cout << "list3的值为:" << endl; for(auto &val: list3) { cout << val << "\t"; } cout << endl; //向list3第一个元素之后插入3个98 list3.insert_after(list3.begin(), 3, 98); cout << "list3的值为:" << endl; for(auto &val: list3) { cout << val << "\t"; } cout << endl; //向list3第一个元素之后插入list的第二个元素到最后一个元素之间的值 list3.insert_after(list3.begin(), ++list.begin(), list.end()); cout << "list3的值为:" << endl; for(auto &val: list3) { cout << val << "\t"; } cout << endl; list3.clear(); cout << endl; forward_list
list4; list4.assign({35, 26, 18}); cout << "list4的值为:" << endl; for(auto &val: list4) { cout << val << "\t"; } cout << endl; //向list4第2个元素后插入73这个元素 list4.emplace_after(++list4.begin(), 73); cout << "list4的值为:" << endl; for(auto &val: list4) { cout << val << "\t"; } cout << endl;// //向list4第2个元素之后插入两个62// list4.emplace_after(list4.begin(), 2, 62);//不支持// //向list4第一个元素之后插入list的第二个元素到最后一个元素之间的值// list4.emplace_after(++list4.begin(), ++list.begin(), list.end());//不支持 list4.clear(); cout << endl; //改变容器存储的个数 forward_list
list5; cout << "list5.empty = " << list5.empty() << " list5.max_size = " << list5.max_size() << endl; cout << "list5的值为:" << endl; list5 = {31, 32, 33, 34}; for(auto &val: list5) cout << val << "\t"; cout << endl; cout << "list5的值为:" << endl; list5.resize(3); for(auto &val: list5) cout << val << "\t"; cout << endl; list5.resize(5); cout << "list5的值为:" << endl; for(auto &val: list5) cout << val << "\t"; cout << endl; cout << "list5的值为:" << endl; list5.resize(7, 67); for(auto &val: list5) cout << val << "\t"; cout << endl; cout << endl;}int main(){ addElement(); cout << endl; cout << "Hello World!" << endl; return 0;}

运行结果:

从以上结果可以看出,添加元素,emplace_frontr比insert_front效果要高很多,原理是emplace_after在元素后原位构造元素,省掉拷贝的过程,emplace_after与insert_after也是一样的原理。但是emplace_after不支持使用第二方的list范围操作和插入多个同样值,代码可以看出校果。

resize重新设置forward_list容器的大小,如果设置的值n小于当前容器的容量,则只取容器前n个元素,如果n大于当前容器的容量,则将其扩充为容量n,如果没有指定填充值,采用0填充,指定默认值则采用默认值填充。

参考:

 

转载地址:http://zbiub.baihongyu.com/

你可能感兴趣的文章
搞懂分布式技术12:分布式ID生成方案
查看>>
搞懂分布式技术13:缓存的那些事
查看>>
搞懂分布式技术14:Spring Boot使用注解集成Redis缓存
查看>>
搞懂分布式技术15:缓存更新的套路
查看>>
搞懂分布式技术16:浅谈分布式锁的几种方案
查看>>
搞懂分布式技术17:浅析分布式事务
查看>>
搞懂分布式技术18:分布式事务常用解决方案
查看>>
搞懂分布式技术19:使用RocketMQ事务消息解决分布式事务
查看>>
搞懂分布式技术20:消息队列因何而生
查看>>
搞懂分布式技术21:浅谈分布式消息技术 Kafka
查看>>
后端技术杂谈1:搜索引擎基础倒排索引
查看>>
后端技术杂谈2:搜索引擎工作原理
查看>>
后端技术杂谈3:Lucene基础原理与实践
查看>>
后端技术杂谈4:Elasticsearch与solr入门实践
查看>>
后端技术杂谈5:云计算的前世今生
查看>>
后端技术杂谈6:白话虚拟化技术
查看>>
后端技术杂谈7:OpenStack的基石KVM
查看>>
后端技术杂谈8:OpenStack架构设计
查看>>
后端技术杂谈9:先搞懂Docker核心概念吧
查看>>
后端技术杂谈10:Docker 核心技术与实现原理
查看>>