【STL记录】Containers--Lists

本文详细介绍了C++标准库中的list容器,包括其特点、如何使用以及一些特殊的修改操作。通过具体示例展示了list的基本操作,如插入、排序、合并等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

list以双链表的形式管理元素:

使用list时,需要加上头文件:

#include <list>

list与array,vector,deque的不同之处:

  • list不提供随机访问,比如要访问第五个元素,你必须从第一个元素开始通过链指针到第五个元素。因此,访问任意元素时较慢。
  • 在任意位置插入和删除元素很快,并且时间相同。
  • list支持的异常处理:每一次操作成功或是一个no-op.

Special Modifying Operations for List

OperationEffect
 c.unique()移除相同元素值的元素,使唯一
 c.unique(op)当op()为true时移除相同元素,使唯一
 c.splice(pos, c2)将c2的全部元素移动到c的pos位置前
 c.splice(pos, c2, c2pos)将c2的c2pos位置的元素移动到c的pos位置前
 c.splice(pos, c2, c2beg, c2end)将c2的[c2beg, c2end)元素移动到c的pos位置前
 c.sort()以<排序所有元素
 c.sort(op)以op()排序所有操作
 c.merge(c2)假定两container中的元素都是已排序的,移动c2的元素到c中,并保持排序
 c.merge(c2, op)假定两container中的元素都是根据op()排序的,移动c2的元素到c中,并保持op()排序
 c.reverse()颠倒所有元素的顺序

Example of Using Lists

#include<list>
#include<iostream>
#include<algorithm>
#include<iterator>
using namespace std;

void printLists(const list<int>& l1, const list<int>& l2)
{
	cout << "list1: ";
	copy(l1.cbegin(), l1.cend(), ostream_iterator<int>(cout, " "));
	cout << endl << "list2: ";
	copy(l2.cbegin(), l2.cend(), ostream_iterator<int>(cout, " "));
	cout << endl << endl;
}

int main()
{
	//create two empty lists
	list<int> list1, list2;
	
	//fill both list with elements
	for(int i=0; i < 6; ++i) {
		list1.push_back(i);
		list2.push_front(i);
	}
	printLists(list1, list2);
	
	//insert all elements of list1 before the first element with value 3 of list2
	//- find() returns an iterator to the first element with value 3
	list2.splice(find(list2.begin(), list2.end(), 3), list1);
	printLists(list1, list2);
	
	//move first element of list2 to the end
	list2.splice(list2.end(), list2, list2.begin());
	printLists(list1, list2);
	
	//sort second list, assign to list1 and remove duplicates
	list2.sort();
	list1 = list2;
	list2.unique();
	printLists(list1, list2);
	
	//merge both sorted lists into the first list
	list1.merge(list2);
	printLists(list1, list2);
}

输出:

 

 

转载于:https://my.oschina.net/daowuming/blog/716928

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值