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

【C++】std::list

 std::list:

std::list 是 C++ 标准库中的一个双向链表容器,它是顺序容器中的一种。与其他顺序容器如 std::vectorstd::deque 不同,std::list 在插入和删除操作上具有显著的优势,特别是在容器的中间部分。

特性

  1. 双向链表: std::list 使用双向链表实现,每个元素包含指向前一个元素和后一个元素的指针。这使得在链表的任意位置进行插入和删除操作都具有 O(1) 的时间复杂度。

  2. 非随机访问: std::list 不支持通过下标随机访问元素。只能通过迭代器进行访问,这意味着访问某个位置的元素需要 O(n) 时间。

  3. 动态大小: 容器大小可以动态调整。

  4. 稳定的迭代器: 在对 std::list 进行插入和删除操作时,除了被删除的迭代器外,其余迭代器保持有效。

常用操作

1. 创建和初始化
#include <list>
#include <iostream>int main() {// 创建一个空的 liststd::list<int> lst1;// 创建一个初始化为 5 个元素的 list,元素值为 10std::list<int> lst2(5, 10);// 使用初始化列表创建 liststd::list<int> lst3 = {1, 2, 3, 4, 5};return 0;
}

2. 访问和修改元素

cpp
#include <list>
#include <iostream>int main() {std::list<int> lst = {1, 2, 3, 4, 5};// 使用迭代器遍历 listfor (auto it = lst.begin(); it != lst.end(); ++it) {std::cout << *it << " ";}std::cout << std::endl;// 修改元素auto it = lst.begin();++it; // 移动到第二个元素*it = 20;std::cout << "Modified list: ";for (const auto& elem : lst) {std::cout << elem << " ";}std::cout << std::endl;return 0;
}

 3. 添加和删除元素

#include <list>
#include <iostream>int main() {std::list<int> lst = {1, 2, 3, 4, 5};// 在末尾添加元素lst.push_back(6);// 在前面添加元素lst.push_front(0);// 删除末尾元素lst.pop_back();// 删除前面元素lst.pop_front();std::cout << "List after push and pop operations: ";for (const auto& elem : lst) {std::cout << elem << " ";}std::cout << std::endl;return 0;
}

4. 插入和删除指定位置的元素

#include <list>
#include <iostream>int main() {std::list<int> lst = {1, 2, 3, 4, 5};// 插入元素auto it = lst.begin();++it; // 移动到第二个位置lst.insert(it, 10); // 在第二个位置插入 10// 删除指定位置的元素it = lst.begin();++it; // 移动到第二个位置lst.erase(it); // 删除第二个位置的元素std::cout << "List after insert and erase operations: ";for (const auto& elem : lst) {std::cout << elem << " ";}std::cout << std::endl;return 0;
}
5. 其他常用方法
  • size(): 返回 list 中元素的数量。
  • empty(): 判断 list 是否为空。
  • clear(): 清空 list 中的所有元素。
  • front(): 访问 list 的第一个元素。
  • back(): 访问 list 的最后一个元素。
  • resize(): 调整 list 的大小,多余的元素会被删除,不足的地方会使用默认构造函数初始化。

 示例:

#include <list>
#include <iostream>int main() {std::list<int> lst = {1, 2, 3, 4, 5};// 输出前端和后端元素std::cout << "Front element: " << lst.front() << std::endl;std::cout << "Back element: " << lst.back() << std::endl;// 修改前端和后端元素lst.front() = 10;lst.back() = 50;std::cout << "Modified front element: " << lst.front() << std::endl;std::cout << "Modified back element: " << lst.back() << std::endl;// 调整大小lst.resize(8, 0); // 增加元素,并用 0 填充std::cout << "Size after resizing to 8: " << lst.size() << std::endl;return 0;
}

http://www.mrgr.cn/news/21993.html

相关文章:

  • 微信小程序授权登录流程以及使用到的API
  • 如何快速练习键盘盲打
  • 【Rocketmq入门-基本概念】
  • 【web网页制作】html+css旅游家乡河南主题网页制作(5页面)【附源码】
  • C语言小游戏--贪吃蛇实现
  • (南京观海微电子)——GH7006 Application Note
  • C++学习笔记----6、内存管理(四)---- 通常的内存陷阱(2)
  • python内置模块datetime.time类详细介绍
  • nginx 上部署 vue 项目,注意这几个细节,性能会好不少
  • PostgreSQL中的多版本并发控制(MVCC)深入解析
  • 验证码的作用,为什么要存在验证码?
  • 嵌入式 24081开班典礼:与梦同行,同筑未来
  • excel翻译软件有哪些?如何高效提翻译?
  • 【C语言】插入排序、希尔排序——动图展示
  • 半年高达552亿元,锁定云第一,中国电信天翼云紧追不舍
  • python的统计分析库scipy.stats使用方法
  • 笔试强训day05
  • JS_数据类型
  • 全能型AI与专业型AI:竞争与共生的未来
  • 安卓下载工具箱_3.8.1/去浏览器跳转登录就是会员