1.1 构造
构造有以下方式
1.1.1 空链表
list<int> name;
1.1.2 有重复元素的链表
list<int> name(10,10);
1.1.2 一模一样的链表
list<int> lp(name);
1.1.3 迭代器构造1
list<int> lp(name.begin(),name.end());
1.1.4 迭代器构造2
vector<int> v1 = {1,2,3,4,5};
list<int> lp(v1.begin(),v1.begin() + 3);
1.1.5 地址构造
int num[] = {1, 2, 3, 4, 5};
list<int> L6(num, num + size(num));
1.1.6 直接赋值
list<int> lp = {1,2,4,5,6};
1.2 计算大小
1.2.1 元素个数
lp.size();
1.2.2 最大能储存元素个数
lp.max_size();
1.2.3 有效元素个数
lp.resize(n);
1.2.4 是否为空
lp.empty();
1.3 插入
list<int> L8;
L8.push_front(4); // 头部增加元素,应为{4}
L8.push_back(5); // 末尾添加元素,应为{4,5}
L8.insert(++L8.begin(), 2); // 任意位置插入一个元素,应为{4,2,5}
L8.insert(L8.begin(), 3, 9); // 任意位置插入n个相同元素,应为{9,9,9,4,2,5}
vector<int> v2={1,2,3};
L8.insert(++L8.begin(), v2.begin(), v2.begin()+2); // 插入另一个容器的数据,应为{9,1,2,9,9,4,2,5}
1.4 删除
L8.pop_front(); // 头部删除元素,应为{1,2,9,9,4,2,5}
L8.pop_back(); // 末尾删除元素,应为{1,2,9,9,4,2}
L8.erase(++L8.begin()); // 任意位置删除一个元素,应为{1,9,9,4,2}
L8.erase(L8.begin(), ++L8.begin()); // 删除两个迭代器之间的元素,应为{9,9,4,2}
L8.clear(); // 清空所有元素,应为{}
1.5 取值
L8 = { 9,1,2,9,9,4,2,5 };
// 获取最后一个元素和第一个元素,必须在L8.empty()!=0时调用,否则此函数将创建未定义的行为。
L8.back();
L8.front();
1.6 遍历
//正向遍历
for (list<int>::iterator it = L8.begin(); it != L8.end(); ++it) //list<int>::iterator可以用auto代替
cout << *it << " "; // 输出为:9 1 2 9 9 4 2 5
cout << endl;
//反向遍历
for (list<int>::reverse_iterator it = L8.rbegin(); it != L8.rend(); ++it) //list<int>::reverse_iterator可以用auto代替
cout << *it << " "; // 输出为:5 2 4 9 9 2 1 9
cout << endl;
1.7 查找
#include<algorithm>
auto it = find(L8.begin(), L8.end(), 2); //只能通过algorithm的find函数来找到同值的迭代器
cout<< *it <<endl; //输出2
cout<< *(++it) <<endl; //输出9
1.8 排序
L8.sort();
L8.sort(greater<int>());
auto cmp1 = [](const int a, const int b) {return (a > b); };
L8.sort(cmp1);
1.9 反转
reverse(L8.begin(), L8.end());
1.10 将另一个list的元素移到当前list的指定位置的前面
list<int> L11 = { 14, 2, 4, 6 };
list<int> L12 = { 1, 7, 10, -2 };
L11.splice(++L11.begin(), L12, ++L12.begin()); //把7移动到了2前面,L11应为{14,7,2,4,6},L12应为{1,10,-2}。
L11.splice(++L11.begin(), L12, ++L12.begin(), L12.end()); //把10,-2移动到了7前面,L11应为{14,10,-2,7,2,4,6},L12应为{1}。
L11.splice(++L11.begin(), L12);
1.11 将两个链表和并
list<int> L13 = { 14, 2, 4, 6 };
list<int> L14 = { 1, 7, 10, -2 };
L13.sort();
L14.sort();
//marge只能合并两个有序链表
L13.merge(L14); //L13应为{-2,1,2,4,6,7,10,14},L14应为{}
以上就是本期的内容了,谢谢观看。