#首先包含头文件:
#include <list>
using namespace std;//需要使用该命名空间
list是一个双向链表,是不支持随机存取的。
#然后定义对象:
list<int> m_list;
定义一个int型的双向list链表。
#输入元素:
m_list.push_back(8);
m_list.push_back(9);
m_list.push_front(1);
m_list.push_front(0);
push_back()用于向list的末尾添加元素,push_front()用于向list的开头添加元素。
上面的操作存入m_list中的结果是:{0,1,8,9}
#删除元素:
m_list.pop_front();
m_list.pop_back();
pop_front()用于删除list中的第一个元素,pop_back()用于删除list中的最后一个元素。
这两个函数的返回值都是void,也就是说这两个函数仅用于删除操作。
操作要求序列必须不为空。
#获取指向list元素的迭代器:
list<int>::iterator m_listIterator;
这样就定义了一个该list类型的迭代器。可以将list的任意元素的迭代器直接赋值给它。
#访问list中的元素:
定义一个同类型的迭代器:
list<int>::iterator m_listIterator;
该迭代器是个指针。
已知m_list中有4个元素,按顺序是:{0,1,8,9}
① list的起始元素:
m_listIterator = m_list.begin();
cout<<*m_listIterator<<endl; //输出m_list的起始元素,即0号元素
输出结果是:0
② list的下一个元素:
m_listIterator++;
cout<<*m_listIterator<<endl; //输出m_list的1号元素
输出结果是:1
注意iterator可以使用++以及--,但却不能使用+=与-=,也不能使用iterator = iterator+1这样的形式。原因是不支持随机存取。参见下面⑤。
③ list的最后一个元素的下一个位置:
m_listIterator = m_list.end();
注意这与back()是不同的。该位置指向的是back()的下一个位置。所以该位置是没有元素的。
④ list的最后一个元素:
cout<<m_list.back()<<endl; //输出m_list的3号元素
输出结果是:9
注意back()函数返回的是个引用,而非iterator指针。
⑤ list的第n个元素:
m_listIterator = m_list.begin();
for (size_ti=0;i<m_list.size();i++)
{
if(i ==n)
{
break;
}
m_listIterator++;
}
cout<<*m_listIterator<<endl; //输出m_list第n个元素
由于list是个双向链表,不支持随机存取,所以要直接定位到第n个元素的位置是不可能的,只能一个元素一个元素地加过去。
#查找list中值为k的元素:
m_listIterator= std::find(m_list.begin(),m_list.end(),k);
其中m_list.begin()与m_list.end()限定了list的查找区间。
std::find只用于查找容器元素为 基本元素
std::find_if用于查找容器元素为 类
注意要调用该find函数需要包含头文件:#include<algorithm>
#删除list中的值为k的元素:
m_list.remove(k);
remove()会将list中值为k的元素全部删除,该函数只用于基本元素。
若要删除满足某种条件的元素,则调用remove_if()。
#清空list中的元素:
m_list.clear();
# list中元素的个数:
m_list.size();
# list是否为空:
m_list.empty();
# list排序:
m_list.sort();
直接这样调用即可。默认升序排序,即排序函数是运算符“<”。可以通过修改排序函数pr来自定义排序方式。
# list最长序列长度:
m_list.max_size();
list不是可以无限存储数据的。每个list对象有自己所能控制的最大长度。
#交换两个list对象:
list<int> listT;
m_list.swap(listT);
交换后,m_list将拥有listT的所有元素,listT将拥有m_list的所有元素。
#合并两个list对象:
list<int> listT;
m_list.merge(listT);
合并后,m_list与listT中的所有元素会按升序排序,然后存储到m_list中。listT将被清空。