list
简介:
c++中的list是一个双向链表模板,可以快速从任何地方进行插入删除操作。但不能随机访问元素,若要访问必须从表头开始遍历,直到找到要找的元素为止。
构建:
list<int>l;
操作:
函数 | 操作 |
---|---|
l.empty() | 判断当前链表是否为空 |
l.size() | 返回当前链表中元素个数 |
l.clear() | 删除当前链表中的所有元素 |
l.push_back(x); | 在当前链表尾部添加一个值x |
push_front() | 在当前链表头部添加一个值x |
l.pop_back(x); | 删除当前链表尾部最后一个值x |
l.remove(x) | 删除链表中所有指定值x的元素 |
l.unique() | 删除链表中相邻的重复元素(保留一个) |
l.erase() | 删除一个元素或一个区域的元素(两个重载) |
l.remove_if(cmp) | 删除链表中满足条件的元素 |
l.sort() | 对链表容器中的元素进行排序 |
l.reverse() | 反转链表 |
l.begin() | 返回迭代器,引用当前链表的第一个元素 |
l.end() | 返回迭代器,引用当前链表的最后一个元素 |
l.rbegin() | 返回迭代器,引用当前链表的最后一个元素 |
l.rend() | 返回迭代器,引用当前链表的第一个元素前面的位置 |
插入:
l.insert() | 用途 |
---|---|
l.insert(pos,x); | 在迭代器的pos位置插入x。(将x插入pos指定的元素前) |
l.insert(pos,m,x); | 在迭代器的pos位置插入m个x。 |
l.insert(pos,pos1,pos2) | 在迭代器的pos位置插入[pos1,pos2)的元素。 |
更多详细操作请看:C++中list用法详解
练习:[插入排序-链表]
(http://acm.nefu.edu.cn/contestShow.php)
#include <bits/stdc++.h>
using namespace std;
list<int>::iterator it;
void disp(list<int> &a)
{
it=a.begin();
printf("%d",*it);
it++;
for(;it!=a.end();it++)
{
printf(" %d",*it);//注意这题的输出格式
}
}
int main()
{
list<int>a;
int n,x,m;
while(cin>>n)
{
for(int i=1;i<=n;i++)
{
cin>>x;
a.push_back(x);//将元素放入链表
}
cin>>m;
for(it=a.begin();it!=a.end();it++)//迭代器遍历直至找到第一个大于m的数
{
if(*it<m)
{
a.insert(it,m);//将m插入当前位置
break;
}
}
disp(a);//打印输出链表
}
return 0;
}