list 的初始化和遍历
/*list的初始化和遍历*/
#if 1
#include <list>
#include <vector>
#include <iostream>
#include<algorithm>
using namespace std;
void TestList1()
{
list<int> L1;
list<int> L2(10, 5);
vector<int> v{1,2,3,4,5};
list<int> L3(v.begin(), v.end());
list<int> L4(L3);
// C++11
list<int> L5{ 1, 2, 3, 4, 5 };
/////////////////////////////////////////
// 链表遍历
for (auto e : L2)
cout << e << " ";
cout << endl;
// list<int>::iterator it = L3.begin();
auto it = L3.begin();
while (it != L3.end())
{
cout << *it << " ";
++it;
}
cout << endl;
auto rit = L4.rbegin();
while (rit != L4.rend())
{
cout << *rit << " ";
++rit;
}
cout << endl;
// 注意:list不能使用原生态指针,即Node*来遍历链表
// 因为list没有提供获取头指针的方法
}
int main(){
TestList1();
}
#endif

std::list 是一个双向链表,提供了双向序列的特性,包括有效地进行插入、删除操作等,但不支持随机访问。
初始化 std::list
空初始化: list<int> L1; 创建了一个空的 int 类型的 list。
填充初始化: list<int> L2(10, 5); 创建了一个包含 10 个元素,每个元素都初始化为 5 的 list。
范围初始化: list<int> L3(v.begin(), v.end()); 使用 vector<int> v 的迭代器范围来初始化 L3,即将 v 中的元素复制到 L3 中。
拷贝初始化: list<int> L4(L3); 使用另一个 list L3 来初始化 L4,复制 L3 的所有元素。
列表初始化 (C++11): list<int> L5{ 1, 2, 3, 4, 5 }; 使用初始化列表直接初始化 L5。
链表遍历
范围 for 循环: 使用范围 for 循环遍历 L2,打印出其所有元素。这是 C++11 引入的一种简洁的遍历容器的方式。
使用迭代器: 通过迭代器 it 遍历 L3,同样打印出所有元素。std::list 提供的迭代器是双向迭代器。
使用反向迭代器: 通过反向迭代器 rit 遍历 L4,但这次是逆序打印出所有元素。反向迭代器从容器的末尾开始遍历至开始。
注意
代码中提到,“list不能使用原生态指针,即 Node*来遍历链表”,这是因为 std::list 的实现细节被抽象化了,用户无法像操作普通链表那样通过节点指针进行遍历或访问。std::list 提供了迭代器来抽象这些细节,使得操作更安全、更容易。
list 的 resize 操作探究
/*list的resize操作探究*/
#if 1
#include <list>
#include <vector>
#include <iostream>
#include<algorithm>
using namespace std;
void TestList2()
{
list<int> L{ 1, 2, 3, 4, 5 };
cout << L.size() << endl;
L.resize(10, 6);
for (auto e : L)
cout << e << " ";
cout << endl;
L.resize(20);
for (auto e : L)
cout << e << " ";
cout << endl;
L.resize(7);
for (auto e : L)
cout << e << " ";
cout << endl;
}
int main(){
TestList2();
}
#endif

resize 方法用于调整链表的大小,即元素的数量。以下是对 TestList2 函数中各个操作的详细解释:
初始化 std::list
list<int> L{ 1, 2, 3, 4, 5 };
使用初始化列表创建了一个包含元素 {1, 2, 3, 4, 5} 的 list。
调整大小并填充新元素
L.resize(10, 6);
调整 L 的大小至 10 个元素。由于新大小大于当前大小,resize 方法会添加额外的元素。在这个例子中,新增的元素被初始化为 6
C++中std::list的初始化、遍历及操作详解

本文详细介绍了C++中std::list的初始化方法(空初始化、填充初始化、范围初始化、拷贝初始化和列表初始化),以及链表的遍历方式(范围for循环和迭代器/反向迭代器),并深入探讨了resize、insert、erase、sort、unique、reverse等操作。
最低0.47元/天 解锁文章
1392

被折叠的 条评论
为什么被折叠?



