当前位置: 首页 > news >正文

C++--List

一,引言

list作为C++STL库中非常常见的容器。熟练的掌握list各个函数接口的使用方法和使用逻辑显得十分重要,因此下文将介绍list的主要的用法,注意事项以及测试用例。

二,构造函数

 list初始化分为默认构造,n个数据的构造,迭代器构造,拷贝构造。赋值函数内部调用的也是拷贝构造。具体实例如下:

list<int> s;
list<int> s1(10, 2);
list<int> s2(s1.begin(), s1.end());
list<int> s3;
s3 = s1;

运行结果如下:

三,迭代器

 常用的迭代器有四种,begin指向开始位置的迭代器;end指向最后数据下一个位置的迭代器;rbegin指向最后一个元素位置的反向迭代器。rend指向最后一个元素下一个位置的反向迭代器。

具体例子如下:

list<int> s{ 1,2,3,4,5,6,7,8 };
cout << *s.begin()<<endl;
cout << *s.rbegin() << endl;

测试结果:
 end以及rend迭代器指向的没有数据。这里不进行测试。

四,capacity

 分别计算list容器是否为空,以及 list容器的数据个数。

具体例子如下:

st<int> s{ 1,2,3,4,5,6,7,8 };cout << s.empty()<<endl;cout << s.size() << endl;

empty容器不为空返回0,为空返回1。

测试结果:

五,元素数据获取

list容器的底层是双向循环链表。不支持数据的随机访问。front返回第一个数据的引用;back返回最后一个数据的引用。

测试用例如下:

list<int> s{ 1,2,3,4,5,6,7,8 };
cout << s.front()<<endl;
cout << s.back() << endl;
s.front() = 10;
s.back() = 20;
for (auto c : s)
{cout << c << ' ';
}

 测试结果如下:

返回的引用是可以修改该位置的数值的。

六,修饰符函数

1,assign

assign函数将指定容器赋值给list对象。第一种是迭代器区间;第二种是n个val数据。具体例子如下:

list<int> s{ 2,3,4,5,6,7,8 };
list<int> s1(5,1);
list<int> s2;
s1.assign(s.begin(), s.end());
s2.assign(s.begin(), s.end());
for (auto ch : s1)
{cout << ch<<' ';
}
cout << endl;for (auto ch : s2)
{cout << ch << ' ';
}
cout << endl;

原list容器的数据会被assign函数指定的数据替代。 

 测试结果如下:

2,push_front;pop_front;push_back;pop_back

头插,头删;尾插,尾删。

具体示例如下:

list<int> s;
s.push_back(10);
s.push_back(9);
s.push_back(8);
s.push_back(7);
printfs(s);
s.push_front(100);
s.push_front(200);
printfs(s);
s.pop_back();
printfs(s);
s.pop_front();
printfs(s);

测试结果如下:
 printfs函数是打印list容器数据函数。

3,erase

删除指定位置或指定区域的数据。传入迭代器位置或者区间。返回删除下一个位置的迭代器。由于list容器的物理地址并不连续。并不会造成迭代器的失效。具体用例如下:

list<int> s{ 1,2,3,4,5,6,7,8,9 };
auto it = s.begin();
it++;
it = s.erase(it);
printfs(s);
s.erase(it,s.end());
printfs(s);

测试结果如下:

 需要注意的是经过erase之后需要用迭代器变量进行接收。否则原本位置的迭代器就会失效。

4,rsize

调整容器的大小,若容器小于该函数参数,则会对容器进行缩容。若该函数参数大于list容器则会进行扩容,扩容部分填充val值。

具体例子如下:

list<int> s{ 1,2,3,4,5,6,78,0 };
s.resize(5);
printfs(s);
s.resize(10, 5);
printfs(s);

测试结果如下:

5,clear

清除list容器,使得list容器为空。

七,operation

1,splice

1,将x插入到原list的指定位置,并对x进行删除。

2,将x的指定位置的数据插入到list的指定位置,并删除x中这个数据。

3,将x的指定区间的数据插入到list的指定位置,并删除x的区间的数据。

具体例子如下:

list<int> s{ 1,2,3,4,5 };
list<int> s1{ 11,12,13,14 };
list<int> s2{ 100,111,222,444 };
s.splice(s.begin(),s2);
printfs(s);
s.splice(s.begin(), s1, s1.begin());
printfs(s);
s.splice(s.begin(), s1, s1.begin(),s1.end());
printfs(s);

测试结果如下:

2.unique

删除有效容器中多余的多个相同数据,只留下一组。

http://www.dtcms.com/a/277068.html

相关文章:

  • AI交互中的礼貌用语:“谢谢“的效用与代价分析
  • 【操作系统-Day 5】通往内核的唯一桥梁:系统调用 (System Call)
  • MVC 参考手册
  • C++值类别与移动语义
  • linux shell从入门到精通(一)——初识Shell程序
  • opencv中contours的使用
  • Spring Boot RESTful API 设计指南:查询接口规范与最佳实践
  • Docker从环境配置到应用上云的极简路径
  • 【Docker基础】Dockerfile指令速览:文件与目录操作指令详解
  • 【深度学习新浪潮】什么是新视角合成?
  • Python----OpenCV(图像分割——彩色图像分割,GrabCut算法分割图像)
  • 【Linux】线程机制深度实践:创建、等待、互斥与同步
  • ARC 02 runner scale set chart:对接集群与 Github Action 服务器
  • Linux|服务器|二进制部署nacos(不是集群,单实例)(2025了,不允许还有人不会部署nacos)
  • 速通TypeScript装饰器
  • 【windows办公小助手】比文档编辑器更好用的Notepad++轻量编辑器
  • 机器学习sklearn入门:使用KNN模型分类鸢尾花和简单调参
  • 分类问题-机器学习
  • 「小程序开发」项目结构和页面组成
  • Http与Https区别和联系
  • 13. Flink 高可用机制简述(Standalone 模式)
  • 单页面和多页面的区别和优缺点
  • phpMyAdmin:一款经典的MySQL在线管理工具又回来了
  • 数学建模:评价决策类问题
  • 【nRF52832】【Ble 1】【低功耗蓝牙简介】
  • UML类图完全解读
  • 【C++详解】STL-priority_queue使用与模拟实现,仿函数详解
  • es里的node和shard是一一对应的关系吗,可以多个shard分配到一个node上吗
  • 板凳-------Mysql cookbook学习 (十一--------9)
  • 什么时候需要用到 multiprocessing?