先看函数:
C++ Lists
Lists are sequences of elements stored in a linked list. Compared to vectors, they allow fast insertions and deletions, but slower random access.
Display all entries for C++ Lists on one page, or view entries individually:
List constructors |
create lists and initialize them with some data |
List operators |
assign and compare lists |
assign |
assign elements to a list |
back |
returns a reference to last element of a list |
begin |
returns an iterator to the beginning of the list |
clear |
removes all elements from the list |
empty |
true if the list has no elements |
end |
returns an iterator just past the last element of a list |
erase |
removes elements from a list |
front |
returns a reference to the first element of a list |
insert |
inserts elements into the list |
max_size |
returns the maximum number of elements that the list can hold |
merge |
merge two lists |
pop_back |
removes the last element of a list |
pop_front |
removes the first element of the list |
push_back |
add an element to the end of the list |
push_front |
add an element to the front of the list |
rbegin |
returns a reverse_iterator to the end of the list |
remove |
removes elements from a list |
remove_if |
removes elements conditionally |
rend |
returns a reverse_iterator to the beginning of the list |
resize |
change the size of the list |
reverse |
reverse the list |
size |
returns the number of items in the list |
sort |
sorts a list into ascending order |
splice |
merge two lists in constant time |
swap |
swap the contents of this list with another |
unique |
removes consecutive duplicate elements |
要注意的是list不提随机的迭代器,迭代器是个双向的,非连续存储,而且是个环状链表在尾端是个未初始化节点
空判断:begin==end;
clear remove unique(把相同元素移出,留一个先sort) insert(插入两种方式)
只能使用成员函数 sort,不能使用 算法 sort(他只接受random iterator)
1![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
/**//*
2
Name: C++ STL LIST
3
Copyright:
4
Author: Torres
5
Date: 17-08-08 23:28
6
Description: LIST 学习笔记
7
*/
8
#include<iostream>
9
#include<list>
10
#include<vector>
11
#include<algorithm>
12
using namespace std;
13![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
typedef struct node
{
14
double x,y;
15![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
node (double a=0,double b=0)
{
16
x=a;
17
y=b;
18
}
19
}node;
20![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
void print(int a)
{printf("%d ",a);return;}
21![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
22
ostream operator <<(ostream out,node a)
23![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif)
{
24
return out<<a.x<<" "<<a.y<<endl;
25
}
26
int main()
27![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif)
{
28
int i,j;
29![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
30
list<node>nlist;
31
list<int>intlist,intlist1;
32
33
vector<int>intv1,intv2;
34
intv1.assign(5,7);
35
intv2.assign(intv1.begin()+1,intv1.end()-1);
36
for_each(intv2.begin()+1,intv2.end(),print);
37
cout<<endl;
38![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
39
//assign的用法,有两种,发现list的iterator不能够相加而vector可以
40
intlist.assign(5,7);
41
intlist1.assign(intlist.begin(),intlist.end());
42
for_each(intlist.begin(),intlist.end(),print);
43
printf("\n");
44
for_each(intlist1.begin(),intlist1.end(),print);
45
printf("\n");
46
47
//size的用法,表示实际数据的大小
48
cout<<intlist.size()<<endl;
49
//list没有容量capacity函数
50![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
51
//因为list是一个双端链表,不支持随机存取,他的存取必须用iterator来进行
52
//而vector,deque,等容器是支持的。
53
list<int>::iterator it1;
54
for(it1=intlist1.begin();it1!=intlist1.end();it1++)
55
cout<<*it1<<" ";
56
cout<<endl;
57![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
58
const node cnode(1.0,2.0);
59
cout<<cnode<<endl;
60![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
61
nlist.assign(5,cnode);
62
list<node>::iterator it2;
63
for(it2=nlist.begin();it2!=nlist.end();it2++)
64
cout<<*it2;
65
return 0;
66
}
67![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)