文章目录
list本质就是链表。
初始化
初始化操作。
cpp
list<int> lt;
list空间增长
size
返回list中有效节点的个数。
cpp
list<int> lt;
lt.push_back(1);
lt.push_back(2);
lt.push_back(3);
lt.size();
empty
检测list是否为空,是返回true,否则返回false。
cpp
list<int> lt;
lt.push_back(1);
lt.push_back(2);
lt.push_back(3);
lt.empty();
list元素存取
front
返回list的第一个节点中值的引用。
cpp
list<int> lt;
lt.push_back(1);
lt.push_back(2);
lt.push_back(3);
cout << lt.front() << endl; //1
back
返回list的最后一个节点中值的引用。
cpp
list<int> lt;
lt.push_back(1);
lt.push_back(2);
lt.push_back(3);
cout << lt.back() << endl; //3
list常用函数
push_front
在list首元素前插入值val的元素。
cpp
list<int> lt;
lt.push_back(1);
lt.push_back(2);
lt.push_back(3);
lt.push_front(0); // 0 1 2 3
pop_front
删除list中第一个元素。
cpp
list<int> lt;
lt.push_back(1);
lt.push_back(2);
lt.push_back(3);
lt.pop_front(); // 2 3
push_back
在list尾部插入值为val的元素。
cpp
list<int> lt;
lt.push_back(1);
lt.push_back(2);
lt.push_back(3);
// 1 2 3
pop_back
删除list中最后一个元素。
cpp
list<int> lt;
lt.push_back(1);
lt.push_back(2);
lt.push_back(3);
lt.pop_back(); // 1 2
insert
在list position位置中插入值为val的元素,会返回list position位置的迭代器。
cpp
list<int> lt;
lt.push_back(1);
lt.push_back(2);
lt.push_back(3);
auto it = find(lt.begin(), lt.end(), 2);
lt.insert(it, 9); // 1 9 2 3
在list position位置的下一个位置中插入值为val的元素。
cpp
list<int> lt;
lt.push_back(1);
lt.push_back(2);
lt.push_back(3);
auto it = find(lt.begin(), lt.end(), 2);
lt.insert(next(it), 9); // 1 2 9 3
erase
删除list position位置的元素,删除完之后,会返回下一个位置的迭代器。
cpp
list<int> lt;
lt.push_back(1);
lt.push_back(2);
lt.push_back(3);
auto it = find(lt.begin(), lt.end(), 2);
lt.erase(it); // 1 3
swap
交换两个list中的元素。
cpp
list<int> lt1;
lt1.push_back(1);
lt1.push_back(2);
lt1.push_back(3);
list<int> lt2;
lt2.push_back(10);
lt2.push_back(9);
lt2.push_back(8);
swap(lt1, lt2);
clear
清空list中的有效元素。
cpp
list<int> lt1;
lt1.push_back(1);
lt1.push_back(2);
lt1.push_back(3);
lt1.clear();
cout << lt1.size() << endl; //0
链表中的sort
链表的排序效率相比vector较差,当数据足够多的时候。可以将链表中的值拷贝到vector中,排完序后在拷贝回链表中。
cpp
void test_list() {
list<int> lt;
lt.push_back(1);
lt.push_back(2);
lt.push_back(3);
lt.push_back(1);
lt.push_back(2);
lt.push_back(3);
lt.push_back(4);
lt.push_back(5);
lt.push_back(4);
lt.push_back(5);
lt.sort();
for (auto& e : lt) {
cout << e << " ";
}
// 1 1 2 2 3 3 4 4 5 5
cout << endl;
//链表的排序效率相比vector较差,当数据足够多的时候。可以将链表中的值拷贝到vector中
//排完序后在拷贝回链表中
lt.sort(greater<int>());
for (auto& e : lt) {
cout << e << " ";
}
//5 5 4 4 3 3 2 2 1 1
cout << endl;
}
reverse
进行逆置。
cpp
void test_list4() {
list<int> lt;
lt.push_back(1);
lt.push_back(2);
lt.push_back(3);
lt.push_back(4);
lt.push_back(5);
lt.reverse();
for (auto& e: lt) {
cout << e << " ";
}
//5 4 3 2 1
cout << endl;
}
merge
将两个链表进行合并。
cpp
void test_list() {
list<int> first;
first.push_back(1);
first.push_back(2);
first.push_back(3);
list<int> second;
second.push_back(4);
second.push_back(5);
second.push_back(6);
first.merge(second);
for (auto& e : first) {
cout << e << " ";
}
//1 2 3 4 5 6
cout << endl;
}
unique
要求列表有序,去重
cpp
void test_list() {
list<int> lt;
lt.push_back(1);
lt.push_back(1);
lt.push_back(1);
lt.push_back(2);
lt.push_back(3);
//要求列表有序 去重
lt.unique();
for (auto& e : lt) {
cout << e << " ";
}
//1 2 3
cout << endl;
}
remove
删除列表中出现的所有val值。
cpp
void test_list7() {
list<int> lt;
lt.push_back(1);
lt.push_back(1);
lt.push_back(1);
lt.push_back(2);
lt.push_back(3);
lt.remove(1);
for (auto& e : lt) {
cout << e << " ";
}
//2 3
cout << endl;
}
splice
在特定的位置拼接两个链表。
cpp
void test_list8() {
list<int> lt1;
lt1.push_back(1);
lt1.push_back(1);
lt1.push_back(1);
lt1.push_back(2);
lt1.push_back(3);
list<int> lt2;
lt2.push_back(9);
lt2.push_back(10);
lt2.push_back(11);
lt2.push_back(12);
lt2.push_back(13);
auto it = lt1.begin();
++it;
lt1.splice(it, lt2);
for (auto& e : lt1) {
cout << e << " ";
}
//将lt2转移到lt1的第二个位置开始
//1 9 10 11 12 13 1 1 2 3
list<int> lt;
lt.push_back(1);
lt.push_back(2);
lt.push_back(3);
lt.push_back(4);
lt.push_back(5);
lt.push_back(6);
int x = 2;
it = find(lt.begin(), lt.end(), x);
if (it != lt.end()) {
// 目标位置 表示移动元素的来源链表 要移动范围的起始迭代器 要移动范围的结束迭代器
lt.splice(lt.begin(), lt, it, lt.end());
}
for (auto& e : lt) {
cout << e << " ";
}// 2 3 4 5 6 1
}
list支持直接传构造的参数 emplace_back
cpp
class A {
public:
A(int a1 = 1, int a2 = 1)
:_a1(a1),
_a2(a2)
{}
private:
int _a1;
int _a2;
};
void test_list() {
list<A> lt;
A aa1(1, 1);
lt.emplace_back(aa1);
lt.emplace_back(A(2, 2));
//支持直接传构造A对象的参数
lt.emplace_back(3, 3);
}

觉得我回答有用的话,记得点个关注哟!谢谢支持!