简介
链表(list)是STL所提供的一种序列化容器,可实现双向遍历,但是无法提供随机访问。链表的一个优点是无论在任何位置添加、删除元素所需的时间均为常量。
代码示例
/*************************/
/* ListTest.cpp */
/*************************/
#include <iostream>
#include <list>
typedef std::list<int> IntList;
// 打印.
static void PrintIntList(IntList& intList, const char * szName);
int main(int argc, char *argv[])
{
int i;
// 几种不同构造方式.
IntList list_1;
IntList list_2(8, 2);
IntList list_3(list_2);
IntList list_4(list_3.begin(), list_3.end());
// 打印.
PrintIntList(list_1, "list_1");
PrintIntList(list_2, "list_2");
PrintIntList(list_3, "list_3");
PrintIntList(list_4, "list_4");
std::cout<<std::endl<<"初始化链表..."<<std::endl;
for(i=5; i>=0; --i)
{
list_1.push_front(i);
}
for(i=6; i<10; ++i)
{
list_1.push_back(i);
}
PrintIntList(list_1, "list_1");
std::cout<<std::endl<<"反转链表..."<<std::endl;
list_1.reverse();
PrintIntList(list_1, "list_1");
std::cout<<std::endl<<"加入重复元素到链表中..."<<std::endl;
list_1.push_back(5);
PrintIntList(list_1, "list_1");
std::cout<<std::endl<<"对链表排序..."<<std::endl;
list_1.sort();
PrintIntList(list_1, "list_1");
std::cout<<std::endl<<"对链表去重..."<<std::endl;
list_1.unique();
PrintIntList(list_1, "list_1");
std::cout<<std::endl<<"删除链表末位元素..."<<std::endl;
list_1.pop_back();
PrintIntList(list_1, "list_1");
std::cout<<std::endl<<"删除链表首位元素..."<<std::endl;
list_1.pop_front();
PrintIntList(list_1, "list_1");
i = 9527;
std::cout<<std::endl<<"删除链表中值为"<<i<<"的元素..."<<std::endl;
list_1.remove(i);
PrintIntList(list_1, "list_1");
i = 6;
std::cout<<std::endl<<"删除链表中值为"<<i<<"的元素..."<<std::endl;
list_1.remove(i);
PrintIntList(list_1, "list_1");
i = 4;
std::cout<<std::endl<<"重定义链表长度为"<<i<<"..."<<std::endl;
list_1.resize(i);
PrintIntList(list_1, "list_1");
std::cout<<std::endl<<"粘接链表..."<<std::endl;
list_1.splice(list_1.end(), list_2, list_2.begin(), list_2.end());
PrintIntList(list_1, "list_1");
std::cout<<std::endl<<"清空链表..."<<std::endl;
list_1.clear();
PrintIntList(list_1, "list_1");
std::cout<<"链表是否为空:"<<list_1.empty()<<std::endl;
return 0;
}
void PrintIntList(IntList& intList, const char * szName)
{
std::cout<<"["<<szName<<"]: ";
std::copy(intList.begin(), intList.end(),
std::ostream_iterator<int>(std::cout, " "));
std::cout<<std::endl;
}
运行结果:
==============================End=================================