STL:list

#首先包含头文件:

#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_listlistT的所有元素会按升序排序,然后存储到m_list中。listT将被清空。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值