C++ list 5

文章详细介绍了C++中list容器的构造方法,包括空链表、有重复元素的链表、通过已有链表复制等。此外,还讨论了list的大小计算、元素插入与删除、取值、遍历、查找、排序、反转以及如何合并和移动元素等操作。示例代码清晰地展示了各种操作的使用方法。
摘要由CSDN通过智能技术生成

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应为{}

以上就是本期的内容了,谢谢观看。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值