C++学习,容器类 <list>

C++ 标准库 <list> 是一个非常重要的容器类,用于存储元素集合,支持双向迭代器。<list>允许在容器的任意位置快速插入和删除元素。与数组或向量(<vector>)不同,<list> 不需要在创建时指定大小,并且可以在任何位置添加或删除元素,而不需要重新分配内存。

std::liststd::vector 不同,std::list 元素在内存中不是连续存储的,而是分散存储,并通过指针链接在一起。这种结构使得 std::list 在插入和删除元素时非常高效,特别是在容器的中间位置。

基本操作:

包含头文件:#include <list>

声明列表:std::list<T> mylist;,其中 T 是存储在列表中的元素类型。

插入元素:mylist.push_back(value);

删除元素:mylist.pop_back(); 或 mylist.erase(iterator);

访问元素:mylist.front(); 和 mylist.back();

遍历列表:使用迭代器 for (auto it = mylist.begin(); it != mylist.end(); ++it)

基本特点:

双向迭代:<list> 提供了双向迭代器,可以向前和向后遍历元素。

非连续存储:由于元素是通过指针链接的,因此它们在内存中不需要连续存储。

快速插入和删除:可以在列表的任何位置快速插入或删除元素,不需要像向量移动大量元素。

示例代码:

#include <iostream>

#include <list>

int main() {

std::list<int> lst;

// 添加元素

lst.push_back(10);

lst.push_front(5);

lst.insert(lst.begin(), 20); // 在开头和第一个元素之间插入 20

// 遍历元素

for (std::list<int>::iterator it = lst.begin(); it != lst.end(); ++it) {

std::cout << *it << " ";

}

std::cout << std::endl;

// 删除元素

lst.pop_back(); // 删除最后一个元素

lst.erase(lst.begin()); // 删除第一个元素

// 再次遍历元素

for (std::list<int>::iterator it = lst.begin(); it != lst.end(); ++it) {

std::cout << *it << " ";

}

std::cout << std::endl;

// 排序

lst.push_back(3);

lst.push_back(1);

lst.sort(); // 对 list 进行排序

// 输出排序后的元素

for (std::list<int>::iterator it = lst.begin(); it != lst.end(); ++it) {

std::cout << *it << " ";

}

std::cout << std::endl;

return 0;

}

相关推荐
别动哪条鱼18 分钟前
AAC ADTS 帧结构信息
网络·数据结构·ffmpeg·音视频·aac
艾莉丝努力练剑23 分钟前
【C++:异常】C++ 异常处理完全指南:从理论到实践,深入理解栈展开与最佳实践
java·开发语言·c++·安全·c++11
oplp6 小时前
第四章 C语言中的基本输入输出(六)
c语言
Zsy_0510036 小时前
【数据结构】二叉树OJ
数据结构
快乐zbc7 小时前
【C++ 基础】:给定一个指针 p,你能判断它是否指向合法的对象吗?
c++
岁忧7 小时前
GoLang五种字符串拼接方式详解
开发语言·爬虫·golang
tyatyatya7 小时前
MATLAB基础数据类型教程:数值型/字符型/逻辑型/结构体/元胞数组全解析
开发语言·matlab
sulikey7 小时前
C++类和对象(下):初始化列表、static、友元、内部类等核心特性详解
c++·static·初始化列表·友元·匿名对象·内部类·编译器优化
心无旁骛~7 小时前
python多进程和多线程问题
开发语言·python
星云数灵7 小时前
使用Anaconda管理Python环境:安装与验证Pandas、NumPy、Matplotlib
开发语言·python·数据分析·pandas·教程·环境配置·anaconda