C++ list 详解

C++ 中的 list 是一种双向链表,它提供了许多有用的操作,如插入、删除、查找和修改元素等。以下是一篇关于 list 的基本用法详解,希望能帮助初学者掌握其基本用法:

一、list 的定义

在 C++ 中,list 是一个模板类,用于存储同类型的元素。它的定义如下:

cpp 复制代码
template <class T> 
class list 
{ 
 public: // ... list 的其他成员函数和变量 ... 
};

其中,T 是一个模板参数,用于指定list中元素的类型。

二、list 的常用操作

创建和初始化:可以使用构造函数创建和初始化 list 对象。例如:

cpp 复制代码
list<int> myList; // 创建一个空的 int 类型的 list 对象

或者,可以使用insert() 方法向 list中插入元素。

cpp 复制代码
list<int> myList; 
myList.insert(myList.begin(), 5); // 在 list 的开头插入元素 5

添加元素 :可以使用 push_back()push_front() 方法向 list 的末尾或开头添加元素。例如:

cpp 复制代码
list<int> myList; myList.push_back(1); // 在末尾添加元素 1 
myList.push_front(0); // 在开头添加元素 0

删除元素 :可以使用 erase() 方法删除指定位置的元素。例如:

cpp 复制代码
list<int> myList; 
myList.push_back(1); 
myList.push_back(2); 
myList.erase(myList.begin() + 1); // 删除第二个元素(即 2)

查找元素 :可以使用 find() 方法查找指定位置的元素。例如:

cpp 复制代码
list<int> myList = {1, 2, 3, 4, 5}; 
auto it = myList.find(3); // 查找值为 3 的元素,返回一个迭代器指向该元素的位置 
 if (it != myList.end()) 
{ // 如果找到了元素,则迭代器不等于 end(),否则为空迭代器(指向 list 的末尾) 
   cout << "Found element: " << *it << endl; // 输出找到的元素的值 
} 
 else 
{ 
   cout << "Element not found." << endl; // 没有找到元素,输出提示信息 
}

修改元素 :可以使用成员函数 operator[]at() 方法修改 list中的元素。例如:

cpp 复制代码
list<int> myList = {1, 2, 3}; 
myList[1] = 4; // 将第二个元素的值为 4,原来的第二个元素值变为 3,
//第三个元素的值为 4(因为 list 是从头部开始计数的)

使用 at() 方法:

cpp 复制代码
list<int> myList = {1, 2, 3}; 
myList.at(1) = 4; // 与上面的效果相同,使用 at() 方法修改元素更加安全,
//不会出现越界访问的情况
//(如果索引超出范围,at() 会抛出 std::out_of_range 异常)

遍历 list :可以使用迭代器遍历 list中的所有元素。例如:

使用for 循环遍历:

cpp 复制代码
list<int> myList = {1, 2, 3, 4, 5}; 
 for (auto it = myList.begin(); it != myList.end(); ++it) 
{ // 使用迭代器遍历 list 中的所有元素,直到到达末尾为止(end() 表示指向 list 的末尾) 
   cout << *it << " "; 
// 输出当前元素的值(注意使用 *it 来获取当前元素的引用) 
}

// 或者使用范围-based for 循环(C++11及以后的版本支持)
  for(const auto& value : mylist) 
   {
        cout << value << " ";
   }
相关推荐
草莓熊Lotso30 分钟前
C++ 方向 Web 自动化测试入门指南:从概念到 Selenium 实战
前端·c++·python·selenium
CoderCodingNo1 小时前
【GESP】C++五级考试大纲知识点梳理, (5) 算法复杂度估算(多项式、对数)
开发语言·c++·算法
星河队长2 小时前
VS创建C++动态库和C#访问过程
java·c++·c#
沐怡旸3 小时前
【穿越Effective C++】条款02:尽量以const, enum, inline替换#define
c++·面试
给大佬递杯卡布奇诺3 小时前
FFmpeg 基本API avcodec_alloc_context3函数内部调用流程分析
c++·ffmpeg·音视频
QT 小鲜肉3 小时前
【个人成长笔记】Qt 中 SkipEmptyParts 编译错误解决方案及版本兼容性指南
数据库·c++·笔记·qt·学习·学习方法
babytiger4 小时前
windows中用wsl使用cuda
windows·wsl·cuda
看到我,请让我去学习4 小时前
Qt 控件 QSS 样式大全(通用属性篇)
开发语言·c++·qt
筱砚.4 小时前
【STL——vector容器】
开发语言·c++
相偎4 小时前
用观察者模式通知UI刷新数据
c++