C++ list 容器

链表容器:
优点: 可以对任意位置进行快速插入或删除元素
缺点: 容器遍历速度, 没有数组快, 占用空间比数组大\

双向链表: 由于链表的存储方式并不是连续的内存空间, 因此链表list中的迭代器只支持迁移和后移, 属于双向迭代器

list 构造函数

list<T> lst;    // list 采用模板实现对象的默认构造形式
list(beg, end); // 构造函数将[beg, end] 区间中的元素拷贝给本身
list(n, elem); // 构造函数将n个elem拷贝给本身
list(const list &list) // 拷贝构造函数

list 赋值交换

assign(beg, end) ; // 将[beg, end] 区间中的数据拷贝赋值给本身
assign(n, elem);  // 将n个elem 拷贝赋值给本身
list&operator=(const list &lst); // 重载等号操作符
swap(lst);   // 将lst与本身的元素互换

list 大小操作

size() ; // 返回容器中元素个数
empty() ;// 判断容器是否为空
resize(num); // 重新制定容器长度为num, 若容器变长, 则以默认值填充新位置
             // 如果容器变短, 则末尾超出容器长度的元素被删除
resize(num, elsem);//重新制定容器长度为num ,若容器变长, 则以elem值填充新位置, 
             // 如果容器变短, 则末尾超出容器长度的元素被删除

list 插入和删除

push_back(elem); // 在容器尾部加入一个元素
pop_back()// 删除容器中最后一个元素
push_front(elem) // 在容器开头插入一个元素
pop_front()// 在容器开头移除第一个元素
insert(pop, elem) // 在pos位置插入elem元素的拷贝, 返回新数据的位置. pop位置使用的是迭代器
insert(pop, n, elem) // 在pos位置插入n个elem数据, 无返回值
insert(pop, beg, end) // 在pos位置插入[beg, end]区间的数据, 无返回值
clear() // 移除容器的所有数据
erase(beg, end) // 删除[beg, end]区间的数据, 返回下一个数据的位置
erase(pos) // 删除pos位置的数据, 返回下一个数据的位置
remove(elem)// 删除容器中所有与elem值匹配的元素

list 容器数据存储

list 不可以是用[]进行访问数据
以及list 不可以使用at(0) 访问list容器中的元素
原因是list 本质链表, 不是用连续线性空间存储数据, 迭代器也是不支持随机访问的
list<int>::iterator it = L1.begin();
it++;// 支持访问
it--;// 支持访问
it = it + 1; // 不支持随机访问

list 容器反转和排序

reverse() // 反转链表
sort()//  链表排序

// 排序:
sort(l1.begin(), l1.end());  // 所有不支持随机访问迭代器的容器, 不可以用标准算法

l1.sort() // 默认排序规则,从小到大 升序

bool mycompare(int v1, int v2)
{
	// 降序 就让第一个数 > 第二个数
	return v1 > v2;
}

l1.sort(mycompare);  // 降序排序

我们可以更改mycompare即可配置排序规则

bool mycompare(int v1, int v2)  // 即可使用很多条件的规则
{
	if(规则1)
	{
		return 1 > 2   // 
	}
	else if(规则2)
	{
		return 2 > 1   // 
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值