C++ STL 容器 list类型

list对于异常支持很好,要么成功,要么不会发生什么事情

以下是 std::list 在异常处理方面表现良好的几个原因:

  1. 动态内存管理std::list 使用动态内存分配来存储元素,这意味着它会在需要时自动分配内存,并在不再需要时释放内存。这种自动管理可以减少内存泄漏和悬挂指针等常见异常的发生。

  2. 内存连续性:与 std::vector 不同,std::list 的元素在内存中并不一定是连续的。这意味着,当插入或删除元素时,不需要移动其他元素来保持连续性。这种特性减少了因内存重新分配和元素移动而可能引发的异常。

  3. 不引发异常的迭代器std::list 的迭代器是稳定的,即使在插入或删除元素后也不会失效。这意味着,当遍历 std::list 并处理元素时,即使发生异常,迭代器仍然有效,不会导致未定义行为。

  4. 异常安全的成员函数std::list 的成员函数设计为异常安全的。这意味着,即使在执行成员函数时抛出异常,std::list 的状态也会保持有效,不会导致程序崩溃或数据损坏。例如,insert()erase() 等成员函数在失败时会抛出异常,但不会导致 std::list 的状态变得无效。

  5. 异常传播:如果在使用 std::list 的过程中发生异常,并且没有被捕获,该异常将会按照C++的异常处理机制被传播到调用栈的上一层,直到被捕获或导致程序终止。std::list 不会试图捕获或隐藏这些异常,从而保证了异常的透明传播。

综上所述,std::list 在设计和实现上考虑了异常处理的需求,通过动态内存管理、稳定的迭代器、异常安全的成员函数以及异常传播机制,提供了良好的异常支持。这使得在使用 std::list 时,即使遇到异常情况,也能够保持程序的稳定性和可靠性。

std::list 是 C++ 标准模板库 (STL) 中的一个双向链表容器。它提供了在链表两端进行快速插入和删除操作的能力。std::list 的主要特性包括:

  1. 双向链表std::list 是一个双向链表,这意味着每个元素都存储了指向其前一个和后一个元素的指针。因此,可以在常数时间内访问元素的前驱和后继。
  2. 插入和删除:在 std::list 的任何位置进行插入和删除操作都是常数时间的,这使得它在某些情况下比向量(如 std::vector)或双端队列(如 std::deque)更加高效。
  3. 内存分配std::list 通常使用动态内存分配来存储元素,这意味着它可以在运行时动态地增长或缩小。
  4. 迭代器std::list 支持双向迭代器,允许你向前或向后遍历链表。
  5. 成员函数std::list 提供了一系列成员函数,如 push_back(), push_front(), pop_back(), pop_front(), insert(), erase(), sort(), merge() 等,用于操作链表。

以下是一个使用 std::list 的简单示例:

#include <iostream>
#include <list> int main() {
std::list<int> myList; // 插入元素
myList.push_back(10);
myList.push_front(5);
myList.insert(myList.begin(), 20); // 遍历元素
for (int num : myList) {
std::cout << num << " ";
}
std::cout << std::endl; // 删除元素
myList.pop_front();
myList.remove(10); // 再次遍历元素
for (int num : myList) {
std::cout << num << " ";
}
std::cout << std::endl; return 0;
}

这个示例展示了如何创建一个 std::list,向其插入元素,遍历元素以及删除元素。注意,std::list 并没有提供随机访问迭代器,因此不能使用下标运算符([])或 at() 函数来访问元素。如果你需要随机访问,可以考虑使用 std::vectorstd::deque

C++ STL 容器 list类型的更多相关文章

  1. c++ STL 常用容器元素类型相关限制 指针 引用

    c++ 的 STL 中主要有 vector , list, map, set  , multimap,multiset 这些容器完全支持使用内置类型和指针(指针注意内存泄露问题). 就是说乱用智能指针 ...

  2. STL容器

    啦啦啦,今天听啦高年级学长讲的STL容器啦,发现有好多东西还是有必要记载的,毕竟学长是身经百战的,他在参加各种比赛的时候积累的经验可不是一天两天就能学来的,那个可是炒鸡有价值的啊,啊啊啊啊啊 #inc ...

  3. c++ stl容器set成员函数介绍及set集合插入,遍历等用法举例

    c++ stl集合set介绍 c++ stl集合(Set)是一种包含已排序对象的关联容器.set/multiset会根据待定的排序准则,自动将元素排序.两者不同在于前者不允许元素重复,而后者允许. 1 ...

  4. 【转】c++中Vector等STL容器的自定义排序

    如果要自己定义STL容器的元素类最好满足STL容器对元素的要求    必须要求:     1.Copy构造函数     2.赋值=操作符     3.能够销毁对象的析构函数    另外:     1. ...

  5. STL容器的适用情况

     转自http://hsw625728.blog.163.com/blog/static/3957072820091116114655254/ ly; mso-default-props:yes; m ...

  6. STL容器的本质

    http://blog.sina.com.cn/s/blog_4d3a41f40100eof0.html 最近在学习unordered_map里面的散列函数和相等函数怎么写.学习过程中看到了一个好帖子 ...

  7. 不要在公共接口中传递STL容器

    最近的一个项目,是开发一个framework,提供给公司内部不同的产品线使用. 之间遇到的一个问题,就是STL容器的使用, 而结论是不要在公共接口中传递STL容器: 这里说的STL容器,但主要则是指容 ...

  8. STL容器的内存分配

    这篇文章参考的是侯捷的<STL源码剖析>,所以主要介绍的是SGI STL实现版本,这个版本也是g++自带的版本,另外有J.Plauger实现版本对应的是cl自带的版本,他们都是基于HP实现 ...

  9. 转:STL容器里存放对象还是指针

    一.问题的引出: 容器可以存放对象,可以存放指针,这里要谈的是两者的使用问题.就是什么时候存放对象更好,什么时候存放指针更好? 二.问题的分析过程: 1. 首先说下stl容器的工作方式   对于内建类 ...

  10. STL容器总结

    一. 种类: 标准STL序列容器:vector.string.deque和list. 标准STL关联容器:set.multiset.map和multimap. 非标准序列容器slist和rope.sl ...

随机推荐

  1. ToneGenerator Init failed Crash 崩溃

    需求需要在扫码时产生一个短促的提示音, 搜了下像这样实现.测试时发现多次扫码后,会触发程序崩溃问题. 异常如下 java.lang.RuntimeException: Init failed at a ...

  2. vulnhub靶场渗透学习

    攻击机:192.168.100.251 目标机:192.168.100.17 netdiscover netdiscover -r 192.168.100.1/24 Currently scannin ...

  3. docker 安装minio

    1.拉取镜像 docker pull minio/minio 2.运行容器 docker run -d -p 9000:9000 --name=minio --restart=always -e &q ...

  4. 强大的AWS lambda

    AWS强大的lambda 自从几年前换工作后,我所参与的项目一直都是基于AWS云服务的架构,我慢慢对serverless的相关基础建设有了一定了解和实践经验.其中lambda是我心中最强大的serve ...

  5. 驱动开发:应用DeviceIoContro开发模板

    内核中执行代码后需要将结果动态显示给应用层的用户,DeviceIoControl 是直接发送控制代码到指定的设备驱动程序,使相应的移动设备以执行相应的操作的函数,如下代码是一个经典的驱动开发模板框架, ...

  6. Spring声明式事务控制配置

    xml配置(配置文件) <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="h ...

  7. MySQL 中 的 bit 类型,tinyint(1);

    之前一直以为 mysql中没有 bit类型,需要使用 tinyint 来标识 bit.但是前端的实体类,不好控制,后来发现这些问题已经有了默认的统一设置,这样反而更好. 总结:MySQL中 使用布尔类 ...

  8. Linux-解决jps查看正在运行的Java进程时显示:process information unavailable 问题

    背景:jps全称为Java Virtual Machine Process Status Tool,是Java提供的一个查看当前用户有权访问的主机的Java进程情况的工具. 因为每一个Java程序都会 ...

  9. NC15033 小G有一个大树

    题目链接 题目 题目描述 小G想要把自己家院子里的橘子树搬到家门口(QAQ..就当小G是大力水手吧) 可是小G是个平衡性灰常灰常差的人,他想找到一个这个橘子树的平衡点. 怎么描述这棵树呢...就把它看 ...

  10. NC16615 [NOIP2008]传纸条

    题目链接 题目 题目描述 小渊和小轩是好朋友也是同班同学,他们在一起总有谈不完的话题.一次素质拓展活动中,班上同学安排做成一个m行n列的矩阵,而小渊和小轩被安排在矩阵对角线的两端,因此,他们就无法直接 ...