目录
导读
今天我们来正式学习list,了解它的一些基本使用方法。我们在之前C语言的数据结构部分,有讲过单链表和双向循环链表,有兴趣的小伙伴可以点进专栏看一下。
1. list基本介绍
C++中的list
是一个双向链表容器。它允许在任意位置进行快速插入和删除操作,并且能够在常量时间内访问任意元素。
2. list构造函数
在C++中,可以使用不同的构造函数来创建list
对象。
1. 默认构造函数:
使用默认构造函数创建一个空的list
对象。
std::list<T> myList;
2. 复制构造函数:
使用另一个list
对象otherList
创建一个新的list
对象,并复制所有元素。
std::list<T> myList(otherList);
3. 范围构造函数:
使用指定范围内的元素创建一个新的list
对象。first
和last
是指向范围内第一个元素和最后一个元素的迭代器。
std::list<T> myList(first, last);
4. 初始化列表构造函数:
使用初始化列表中的值来创建一个新的list
对象。
std::list<T> myList = {val1, val2, val3, ...};
示例:
int main()
{
// 默认构造函数
list<int> myList1;
// 复制构造函数
list<int> myList2(myList1);
// 范围构造函数
list<int> myList3(myList1.begin(), myList1.end());
// 初始化列表构造函数
list<int> myList4 = { 1, 2, 3, 4, 5 };
// 遍历list并打印所有元素
for (int num : myList4) {
cout << num << " ";
}
cout << endl;
return 0;
}
3. list迭代器
list
容器提供了双向迭代器(bidirectional iterators),可以用于遍历和操作容器中的元素。list
的迭代器支持前进(++)和后退(--)操作,并且可以跳转到任意位置。
以下是一些常用的list
迭代器操作:
示例:
int main()
{
list<int> myList = { 1, 2, 3, 4, 5 };
// 正向迭代器遍历list
cout << "正向遍历list: ";
list<int>::iterator itr;
for (itr = myList.begin(); itr != myList.end(); ++itr)
{
cout << *itr << " ";
}
cout << endl;
// 逆向迭代器遍历list
cout << "逆向遍历list: ";
list<int>::reverse_iterator ritr;
for (ritr = myList.rbegin(); ritr != myList.rend(); ++ritr)
{
cout << *ritr << " ";
}
cout << endl;
return 0;
}
4. list容量
使用size()
函数来获取容器的大小。
empty()
函数返回一个bool
类型的值,如果容器为空,则返回true
;否则返回false
。
int main()
{
std::list<int> myList = { 1, 2, 3 };
cout << "容器大小:" << size(myList) << endl;
if (myList.empty())
{
cout << "容器为空" << endl;
}
else
{
cout << "容器不为空" << endl;
}
myList.clear();
cout << "容器大小:" << size(myList) << endl;
if (myList.empty())
{
cout << "容器为空" << endl;
}
else
{
cout << "容器不为空" << endl;
}
return 0;
}
5. list的修改操作
list
是一种双向链表容器,提供了多种修改容器的操作函数。下面是一些常见的list
的修改操作函数:
1. 添加元素:
2. 删除元素:
3. 修改元素:
int main()
{
list<int> my_list = { 1, 2, 3 };
// 添加元素
my_list.push_back(4);
my_list.push_front(0);
auto it = my_list.insert(++my_list.begin(), 5);
for (auto e : my_list)
{
cout << e << " ";
}
cout << endl;
// 删除元素
my_list.pop_back();
my_list.pop_front();
my_list.erase(it);
for (auto e : my_list)
{
cout << e << " ";
}
cout << endl;
// 修改元素
*++my_list.begin() = 6;
// 打印列表元素
for (const auto& elem : my_list)
{
cout << elem << " ";
}
cout << endl;
return 0;
}
6. list排序
在C++中,可以使用list
容器的sort()
成员函数对列表进行排序。sort()
函数会根据元素的默认比较函数(operator<
)来进行排序。如果列表中的元素是自定义类型,可以通过在类中重载小于操作符(operator<
)来定义自定义的比较方式。
int main()
{
list<int> my_list = { 5, 2, 8, 1, 4 };
// 对列表进行升序排序
my_list.sort();
// 打印排序后的列表
for (const auto& elem : my_list)
{
cout << elem << " ";
}
cout << endl;
// 对列表进行降序排序
my_list.sort(greater<int>());
for (const auto& elem : my_list)
{
cout << elem << " ";
}
cout << endl;
return 0;
}