C++ stl list

目录

1.定义

2.基本函数

2.1.构造函数

2.2.添加元素

2.3.删除元素

2.4.list重要的迭代器

2.5.list其他函数

3.list使用实例


1.定义

list是C++ stl中的部分内容,本质上list容器就是一个双向链表,可以高效的插入删除元素。使用的时候需要添加头文件#include<list>

2.基本函数

2.1.构造函数

  • std::list<int> li:创建一个空的list
  • std::list<int> li{1,2,3}:创建一个有元素1,2,3的list
  • std::list<int> li(20):创建一个有20个元素0的list
  • std::list<int> li(20,2):创建一个有20个元素2的list
  • std::list<int> li1(li):创建一个和li相同的list
  • std::list<int> li2(li1.begin(),li2.end()):创建一个有[begin(),end{}]之间元素的list

2.2.添加元素

注意在list中不可以使用下表访问,list中间的元素不可以随意访问

  • li.push_back(2):在结尾添加元素2
  • li.push_front(2):在开头添加元素2
  • li.insert(li.begin(),2):在开头添加元素2(注意不可以在pos的位置使用li.begin()+n
  • li.insert(li.begin(),2,3):在开头添加2个元素3
  • li.insert(li.begin(),li1.begin(),li1.end()):在开头添加[begin(),end()]之间的元素

2.3.删除元素

  • li.pop_back():删除结尾的一个元素
  • li.pop_front():删除开头的一个元素
  • li.erase(li.begin()):删除开头的一个元素
  • li.clear():删除li中所有元素

2.4.list重要的迭代器

  • ve.begin():返回正向迭代器的第一个元素
  • ve.end():返回正向迭代器的最后一个元素的下一个位置
  • ve.rbegin():返回反向迭代器的第一个元素,即vector中的最后一个元素
  • ve.rend():返回反向迭代器的最后一个元素的下一个位置,即vector中的第一个元素的前一个位置
  • ve.front():返回vector开头一个元素的引用
  • ve.back():返回vector最末一个元素的引用

2.5.list其他函数

  • li.empty():判断list是否为空
  • li.size():list中元素个数

3.list使用实例

  • 将两个有序的list组合成一个有序的list(默认是升序的,注意使用的list一定是有序的,否则会报sequence not ordered)
#include <numeric>
#include<iostream>
#include<list>

void main(){
	std::list<int> a1{ 1, 3, 5 }, a2{ 2, 4, 6 };
	a1.merge(a2);
	std::list<int>::iterator it;
	std::cout << "a1.merge(a2):";
	for (it = a1.begin(); it != a1.end(); it++){
		std::cout << *it << " ";
	}
	std::cout << std::endl;
}

也可以将有序定为自己想用的

#include <numeric>
#include<iostream>
#include<list>

void main(){
	std::list<int> a1{ 5, 3, 1 }, a2{ 6, 4, 2 };
	a1.merge(a1, [](int n1, int n2){return n1>n2; });
	std::list<int>::iterator it;
	std::cout << "a1.merge(a2):";
	for (it = a1.begin(); it != a1.end(); it++){
		std::cout << *it << " ";
	}
	std::cout << std::endl;
}
  • 将两个list连接起来——a1.splice(a1.begin(),a2);,将a2整个放在a1之前,释放a2
#include <numeric>
#include<iostream>
#include<list>

void main(){
	std::list<int> a1{ 5, 3, 1 }, a2{ 6, 4, 2 };
	std::list<int>::iterator it;
	a1.splice(a1.begin(),a2);
	std::cout << "a1.splice(a1.begin(),a2):";
	for (it = a1.begin(); it != a1.end(); it++){
		std::cout << *it << " ";
	}
	std::cout << std::endl;
}

a1.splice(a1.begin(), a2, a2.begin())——将a2的begin()位置的元素连接到a1的begin()位置,并且在a2中施放掉begin()位置的元素

#include <numeric>
#include<iostream>
#include<list>

void main(){
	std::list<int> a1{ 5, 3, 1 }, a2{ 6, 4, 2 };
	std::list<int>::iterator it;
	a1.splice(a1.begin(), a2, a2.begin());
	std::cout << "a1.splice(a1.begin(),a2):";
	for (it = a1.begin(); it != a1.end(); it++){
		std::cout << *it << " ";
	}
	std::cout << std::endl;
}
  • remove()——删除一个元素
#include <numeric>
#include<iostream>
#include<list>

void main(){
	std::list<int> a1{ 1, 2, 3, 4, 5 };
	a1.remove(3);
	std::list<int>::iterator it;
	std::cout << "remove():";
	for (it = a1.begin(); it != a1.end(); it++){
		std::cout << *it << " ";
	}
	std::cout << std::endl;
}

也可以自定义删除元素的范围

#include <numeric>
#include<iostream>
#include<list>

void main(){
	std::list<int> a1{ 1, 2, 3, 4, 5 };
	a1.remove_if([](int n){return n<3; });
	std::list<int>::iterator it;
	std::cout << "remove():";
	for (it = a1.begin(); it != a1.end(); it++){
		std::cout << *it << " ";
	}
	std::cout << std::endl;
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值