头文件:
#include
模板类list是一个容器,list是由双向链表来实现的,每个节点存储1个元素。list支持前后两种移动方向。
优势: 任何位置执行插入和删除动作都非常快
list与vector的区别:
list listname;
list listname(size);
list listname(size,value);
list listname(elselist);
list listname(first, last);
void push_front(const T& x); // 头部添加
void push_back(const T& x); // 尾部添加
void pop_front(); // 头部删除
void pop_back(); // 尾部删除
size_type size() const; // 返回元素个数
size_type max_size() const; // 返回list对象最大允许容量
void resize(size_type n, T x=T()); // 调整list对象的大小
begin() // 返回指向容器中第一个元素的双向迭代器。
end() // 返回指向容器中最后一个元素所在位置的下一个位置的双向迭代器。
rbegin() // 返回指向最后一个元素的反向双向迭代器。
rend() // 返回指向第一个元素所在位置前一个位置的反向双向迭代器。
cbegin() // 和 begin() 功能相同,只不过在其基础上,增加了 const 属性,不能用于修改元素。
cend() // 和 end() 功能相同,只不过在其基础上,增加了 const 属性,不能用于修改元素。
crbegin() // 和 rbegin() 功能相同,只不过在其基础上,增加了 const 属性,不能用于修改元素。
crend() // 和 rend() 功能相同,只不过在其基础上,增加了 const 属性,不能用于修改元素。
程序示例:
#pragma warning(disable:4786)
#include
#include
#include
#include
//#include
using namespace std;
template void print(const T& Ele)
{
cout<<" "<mylist_string;
listmylist_double(6);
//---------初始化mylist_string
mylist_string.push_front("1: Jack");
mylist_string.push_front("2: Tom");
mylist_string.push_front("3: Mike");
//---------初始化mylist_double
mylist_double.push_front(10.0);
mylist_double.push_front(20.0);
mylist_double.push_front(30.0);
mylist_double.push_front(40.0);
mylist_double.push_front(50.0);
//下述是三种容器定义形式
list mylist_int(6,0); // 6个0:0 0 0 0 0 0
listmylist_double2(6,0.0); // 6个0.0:0.0 0.0 0.0 0.0 0.0 0.0
listelselist(mylist_int); // 以其它双向队列初始化
listIterlist(mylist_double.begin(),mylist_double.end()); // 以其他队列初始化
//----输出各个容器中的元素
cout<<"打印 mylist_string:"<::iterator iter_String; // 迭代器
for(iter_String=mylist_string.begin();iter_String!=mylist_string.end();iter_String++)
{
string temp=*iter_String;
print(temp);
}
cout<<"打印 mylist_double:"<::iterator Iter_D;
list::reverse_iterator Iter_rD;
cout<<"打印 mylist_double 所有元素:"<
bool empty() const;
#include
#include
using namespace std;
void main()
{
listmylist;
mylist.push_back(10.2);
bool empty=0;
if(mylist.empty())
cout<<"The list is empty!"<
list型容器不提供成员函数at()和操作符operator[],可以使用迭代器进行元素的访问.
#include
#include
#include
using namespace std;
void print(double& Ele)
{
cout<mylist;
mylist.push_back(11.1);
mylist.push_back(21.5);
mylist.push_back(31.6);
mylist.push_back(41.7);
int count=mylist.size(); // 获取大小
for_each(mylist.begin(),mylist.end(),print); // 遍历打印
cout<::iterator Iter_S;
Iter_S=mylist.begin();
cout<<"The third element is "<<*(++(++(++Iter_S)))<
list型容器提供了可以重置元素值的成员函数assign(),原型如下:
void assign(const_iterator first, const_iterator last);
void assign(size_type n, const T& x=T());
使用方法:
#include
#include
using namespace std;
// 打印队列所有元素
void print(list& mylist)
{
list::iterator Iter;
mylist.reverse();
for(Iter=mylist.begin();Iter!=mylist.end();Iter++)
{
cout<<*Iter<<", ";
}
cout< list_One,list_Two, list_Three;
// 初始化 list_One
double Ele=0.0;
for(int i=0;i<10;i++)
{
Ele=i+i/10.0;
list_One.push_front(Ele);
}
print(list_One);
// 初始化 list_Two
list_Two.assign(5,5.6);
print(list_Two);
// 初始化 list_Three
list_Three.assign(list_One.begin(),list_One.end());
print(list_Three);
}
list提供了成员函数swap().
#include
#include
using namespace std;
void print(list& mylist)
{
list::iterator Iter;
mylist.reverse();
for (Iter = mylist.begin(); Iter != mylist.end(); Iter++)
{
cout << *Iter << ", ";
}
cout << endl;
}
void main()
{
list list_One, list_Two, list_Three;
double Ele = 0.0;
for (int i = 0; i < 10; i++)
{
Ele = i + i / 10.0;
list_One.push_front(Ele);
}
cout << "List_One 输出:" << endl;
print(list_One);
list_Two.assign(5, 5.6);
cout << "List_Two 输出:" << endl;
print(list_Two);
list_Three.assign(list_One.begin(), list_One.end());
cout << "list_Three 输出:" << endl;
print(list_Three);
/******** list_One与list_Two交换 **********/
list_One.swap(list_Two);
cout << "list_one和list_Two交换之后:" << endl;
cout << "List_One 输出:" << endl;
print(list_One);
cout << "List_Two 输出:" << endl;
print(list_Two);
/******** list_One与list_Three交换 **********/
swap(list_One, list_Three);
cout << "list_one和list_Three交换之后:" << endl;
cout << "List_One 输出:" << endl;
print(list_One);
cout << "list_Three 输出:" << endl;
print(list_Three);
}
insert()的原型:
erase()的原型:
使用示例:
#include
#include
#include
using namespace std;
void OutToScreen(int& Ele)
{
cout< mylt;
for(int i=0;i<10;i++)
mylt.push_back(i);
// 打印
for_each(mylt.begin(),mylt.end(),OutToScreen);
cout<
使用示例:
#include
#include
#include
using namespace std;
void print(int& Ele)
{
cout < L1,L2;
L1.push_back(1);
L1.push_back(2);
L2.assign(L1.begin(),L1.end());
cout<<"打印 list L1: ";
for_each(L1.begin(),L1.end(),print);
cout<L2)
cout<<"L1 大于 L2."<
void merge(list& x);
void merge(list& x, greater pr);
void sort();
void sort(greaterpr);
使用示例:
#include
#include
#include
using namespace std;
void print(int& Ele)
{
cout< L1,L2,L3;
list::iterator I1,I2,I3;
L1.push_back(1);
L1.push_back(5);
L2.push_back(2);
L2.push_back(3);
L3.push_back(7);
L3.push_back(8);
// 打印 L1,L2,L3
cout<<"L1 : ";
for_each(L1.begin(),L1.end(),print);
cout<()); //所有元素自动按从大到小排序
cout<<"L1 (从大到小排序): ";
for_each(L1.begin(),L1.end(),print);
cout<
void remove(const Type& _Val);
template void remove_if(Pred pr);
使用示例:
#include
#include
#include
using namespace std;
void print(int& Ele)
{
cout<& L, int num)
{
int temp;
L.clear();
for(int i=0;i L1;
Origin(L1,9); // 1 2 3 4 5 6 7 8 9
// 添加一个9
int temp;
temp=9;
L1.push_back(temp);
// 添加一个8
temp=8;
L1.push_back(temp);
cout<<"Ouput the list \'L1\':"<
// entire list (1)
void splice (const_iterator position, list& x);
void splice (const_iterator position, list&& x);
// single element (2)
void splice (const_iterator position, list& x, const_iterator i);
void splice (const_iterator position, list&& x, const_iterator i);
// element range (3)
void splice (const_iterator position, list& x,
const_iterator first, const_iterator last);
void splice (const_iterator position, list&& x,
const_iterator first, const_iterator last);
示例:
#include
#include
#include
using namespace std;
void print(int& Ele)
{
cout< L1,L2,L3,L0;
//list::iterator I1,I2,I3;
L1.push_back(1);
L1.push_back(5);
L2.push_back(2);
L2.push_back(3);
L3.push_back(7);
L3.push_back(8);
L0.push_back(9);
L0.push_back(-1);
// 打印 L1,L2,L3,L0
cout<<"L1 : ";
for_each(L1.begin(),L1.end(),print);
cout<()); //所有元素自动按从大到小排序
cout<<"L1 (从大到小排序): ";
for_each(L1.begin(),L1.end(),print);
cout<
移除相邻重复元素
void uniqe();
示例:
#include
#include
#include
using namespace std;
void Print(int& Ele)
{
cout<L1,L2;
L1.push_back(1);
L1.push_back(2);
L1.push_back(3);
L1.push_back(1);
L1.push_back(2);
L1.push_back(3);
L1.push_back(5);
L1.push_back(7);
L2.assign(L1.begin(),L1.end());
// 打印 L1,L2
for_each(L1.begin(),L1.end(),Print);
cout< Pred;
L2.unique(Pred);
for_each(L2.begin(),L2.end(),Print);
cout<
实现将容器中所有元素用原来相反的顺序进行排列;
void reverse();