list容器:

1.list 容器 的本质就是双向环形链表,最后一个节点刻意做成空节点,符合容器的左闭右开的原则
2.list 的迭代器 是一个智能指针,其实就是一个类,通过操作符重载模拟各种操作(++i,i++等),一个node的大小是4字节(32位机器),里面包含两个指针+一个数据

图1 截选自侯捷的STL源码剖析的课程

用例:

 //-----------------作者:侯捷------------------
#include <list> //使用list必须包含的头文件
#include <stdexcept>
#include <string>
#include <cstdlib> //abort()
#include <cstdio> //snprintf()
#include <algorithm> //find()
#include <iostream>
#include <ctime>
namespace jj03
{
void test_list(long& value) //value表示 容器的大小
{
cout << "\ntest_list().......... \n"; list<string> c;
char buf[]; clock_t timeStart = clock();
for(long i=; i< value; ++i)
{
try { //防止内存不够泄露
snprintf(buf, , "%d", rand());
c.push_back(string(buf));
}
catch(exception& p) {
cout << "i=" << i << " " << p.what() << endl;
abort();
}
}
cout << "milli-seconds : " << (clock()-timeStart) << endl;
cout << "list.size()= " << c.size() << endl;
cout << "list.max_size()= " << c.max_size() << endl; //
cout << "list.front()= " << c.front() << endl;
cout << "list.back()= " << c.back() << endl; string target = get_a_target_string();
timeStart = clock();
auto pItem = find(c.begin(), c.end(), target); //auto实参自行推导 调用find方法查找
cout << "std::find(), milli-seconds : " << (clock()-timeStart) << endl; if (pItem != c.end())
cout << "found, " << *pItem << endl;
else
cout << "not found! " << endl; timeStart = clock();
c.sort(); //调用sort方法排序
cout << "c.sort(), milli-seconds : " << (clock()-timeStart) << endl; c.clear(); }
53 }
 
容器list自带的方法可自行参考书籍《c++ primer,常见的包括:
 push_front(v):把元素v插入到链表头部
pop_front():删除双向队列的第一个元素 push_back(v):把元素v插入到双向队列的尾部
pop_back():删除双向队列的最后一个元素 begin():返回向量中第一个元素的迭代器
back(): 获得list容器的最后一个元素 clear(): 清空list中的所有元素
empty():利用empty() 判断list是否为空。

最新文章

  1. MySQL &#183; 答疑解惑 &#183; MySQL 锁问题最佳实践
  2. springmvc学习笔记--ueditor和springmvc的集成
  3. Spring Framework------&gt;version4.3.5.RELAESE-----&gt;Reference Documentation学习心得-----&gt;使用spring framework的IoC容器功能-----&gt;方法一:使用XML文件定义beans之间的依赖注入关系
  4. SQL语句汇总(二)——数据修改、数据查询
  5. CentOS中通过stat查看文件的元数据
  6. ADO.NET 增删查改小总结
  7. jQuery 插件开发 笔记
  8. ios搭建开发环境
  9. winform编程设定listview选中行
  10. Egret引擎的常用倒计时
  11. Windows抓屏技术
  12. Salesforce的数据安全防护措施
  13. XML系列之--解析电文格式的XML(二)
  14. USACO 2012 December ZQUOJ 24122 Scrambled Letters(二分)
  15. android:活动的最佳实践
  16. c++学习笔记—单链表基本操作的实现
  17. BZOJ 1491 社交网络 Floyd 最短路的数目
  18. 比较全的css重设
  19. ORA-01034和ORA-27101的错误
  20. iOS 12中无法获取WiFi的SSID了?

热门文章

  1. jsPDF
  2. django Highcharts制作图表--显示CPU使用率
  3. ubuntu采用apt方式安装多个版本php-fpm
  4. first-child和first-of-type
  5. 自制一个可编辑QueryString的类URLModifier
  6. Python知识点汇总
  7. C++扬帆远航——12(抓小偷)
  8. Java入门教程七(数组)
  9. ASP.NET CORE 管道模型及中间件使用解读
  10. 它的JS与HTML标签是分离的吗