C++的list的常用方法

参考文献https://www.cnblogs.com/fnlingnzb-learner/p/5889483.html
Lists将元素按顺序储存在链表中. 与 向量(vectors)相比, 它允许快速的插入和删除,但是随机访问却比较慢.

常用函数:
assign() 给list赋值
back() 返回最后一个元素
begin() 返回指向第一个元素的迭代器
clear() 删除所有元素
empty() 如果list是空的则返回true
end() 返回末尾的迭代器
erase() 删除一个元素
front() 返回第一个元素
get_allocator() 返回list的配置器
insert() 插入一个元素到list中
max_size() 返回list能容纳的最大元素数量
merge() 合并两个list
pop_back() 删除最后一个元素
pop_front() 删除第一个元素
push_back() 在list的末尾添加一个元素
push_front() 在list的头部添加一个元素
rbegin() 返回指向第一个元素的逆向迭代器
remove() 从list删除元素
remove_if() 按指定条件删除元素
rend() 指向list末尾的逆向迭代器
resize() 改变list的大小
reverse() 把list的元素倒转
size() 返回list中的元素个数
sort() 给list排序
splice() 合并两个list
swap() 交换两个list
unique() 删除list中重复的元素

一个bug
在下面这段代码中需要注意到的是迭代器iter的定义,list<int>::iterator iter;的方法定义迭代器时,在主函数中能通过编译,但是在函数put_list中定义的迭代器,如果这样用会报如下的错,需要使用前面的typedef list<int> INLIST;INLIST::iterator iter;不知道原因

/home/jlm/桌面/main.cpp:16:7: error: expected primary-expression before ‘int’
  list<int>::iterator iter;

示例代码1–常用

#include <iostream>
#include <string>
#include <list>

using namespace std;
typedef list<int> INLIST;

//从前向后显示list队列的全部元素
void put_list(list<int> list,string name)
{
	if(list.empty())
	{
		cout<<"list--"<<name<<"is empty!"<<endl;
		return;
	}
	INLIST::iterator iter;
	
	cout<<"The contents of "<<name<<":";
	for(iter=list.begin();iter!=list.end();iter++)
		cout<<*iter<<" ";
	cout<<endl;
}

//测试list容器的功能
int main(void)
{
	//三种初始化list的方式
	//list1对象初始为空
	list<int> list1;
	//list2对象最初有10个值为6的int元素
	list<int> list2(10,6);
	//list3对象最初有3个值为6的int元素
	list<int> list3(list2.begin(),--list2.end());

	//声明一个名为iter的迭代器
	list<int>::iterator iter;

	//从前向后显示各个list对象的元素
	put_list(list1,"list1");
	put_list(list2,"list2");
	put_list(list3,"list3");

	//向list1序列后面添加两个元素
	list1.push_back(2);
	list1.push_back(4);
	cout<<"list1.push_back(2) and list.push_back(4): "<<endl;	
	put_list(list1,"list1");

	//在list1序列中插入数据
	list1.insert(++list1.begin(),3,9);
	cout<<"list1.insert(list1.begin()+1,3,9): "<<endl;

	//测试引用类函数
	cout<<"list1.front()= "<<list1.front()<<endl;
	cout<<"list1.back()= "<<list1.back()<<endl;

	//从list1序列的前后各移去一个元素
	list1.pop_front();
	list1.pop_back();
	cout<<"list1.pop_front() anf list1.pop_back(): "<<endl;
	put_list(list1,"list1");

	//清除list1中的第二个元素
	list1.erase(++list1.begin());
	cout<<"list1.erase(++list1.begin()): "<<endl;
	put_list(list1,"list1");

	//对list2赋值并显示
	list2.assign(8,1);
	cout<<"list2.assign(8,1): "<<endl;
	put_list(list2,"list2");

	//显示序列的状态信息
	cout<<"list1.max_size(): "<<list1.max_size()<<endl;
	cout<<"list1.size(): "<<list1.size()<<endl;
	cout<<"list1.empty(): "<<list1.empty()<<endl;

	//list序列容器的运算
	put_list(list1,"list1");
	put_list(list3,"list3");
	cout<<"list1>list3: "<<(list1>list3)<<endl;
	cout<<"list1<list3: "<<(list1<list3)<<endl;
	
	//对list1容器排序
	list1.sort();
	put_list(list1,"list1");
	
	//结合处理
	list1.splice(++list1.begin(),list3);
	put_list(list1,"list1");
	put_list(list3,"list3");
}

示例代码二–list的比较

#include <iostream>
#include <string>
#include <list>

using namespace std;
typedef list<int> INLIST;

//从前向后显示list队列的全部元素
void put_list(list<int> list,string name)
{
	if(list.empty())
	{
		cout<<"list--"<<name<<"is empty!"<<endl;
		return;
	}
	INLIST::iterator iter;
	
	cout<<"The contents of "<<name<<":";
	for(iter=list.begin();iter!=list.end();iter++)
		cout<<*iter<<" ";
	cout<<endl;
}

//测试list容器的功能
int main(void)
{
	//三种初始化list的方式
	//list1有1个值为9的元素
	list<int> list1(1,9);
	//list2对象最初有3个值为6的int元素
	list<int> list2(3,6);

	cout<<"(list1(1,9)>list2(3,6)): "<<(list1>list2)<<endl;

	//list3有3个值为6的元素
	list<int> list3(3,6);
	//list2对象最初有3个值为6的元素
	list<int> list4(3,6);
	cout<<"(list3(3,6)>list4(3,6)): "<<(list3>list4)<<endl;

	//list5有4个值为6的元素
	list<int> list5(4,6);
	//list6对象最初有3个值为6的元素
	list<int> list6(3,6);
	cout<<"(list5(4,6)>list6(3,6)): "<<(list5>list6)<<endl;

	//list7有4个值为6的元素
	list<int> list7(100,1);
	//list8对象最初有3个值为6的元素
	list<int> list8(3,6);
	cout<<"(list7(100,1)>list8(3,6)): "<<(list7>list8)<<endl;
}
(list1(1,9)>list2(3,6)): 1
(list3(3,6)>list4(3,6)): 0
(list5(4,6)>list6(3,6)): 1
(list7(100,1)>list8(3,6)): 0

从结果中可以分析得到,(list1>list2)的结果是把两个链表一个一个地拿出来比较,比较大小的结果是对应元素类型的比较大小,如果出现了大小结果则返回。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值