STL中的list是序列容器,内部实现方式是双向链表,而链表的优势在于插入和删除元素效率高,但是随机访问元素相比vector数组的形式就低,所以读者在具体实现项目的时候,可以考虑因素选取。
函数说明
list | explain |
---|---|
push_back | 增加一元素到链表尾 |
push_front | 增加一元素到链表头 |
sort | 对链表排序,默认升序 |
merge | 合并两个有序链表并使之有序 |
splice | 对两个链表进行结合(三个重载函数) 结合后第二个链表清空 |
insert | 在指定位置插入一个或多个元素(三个重载函数) |
swap | 交换两个链表(两个重载) |
这里需要注意的是,merge和splice函数用完后,函数形参的list链表会被清空。而且merge函数只能合并两个有序链表。
#include <iostream>
#include <list>
std::list<int> g_List;
//******************************************************************
//FUNCTION:
void addElement(std::list<int>& vList)
{
for (unsigned int i=0; i<3; i++)
{
vList.push_back(rand()%100); //链表尾部插入一个随机数
}
vList.push_front(-1); //元素放在随机数最前
vList.sort();//排序,默认升序,可以自定义排序函数,传入函数谓词即可
}
//******************************************************************
//FUNCTION:
void printElement(const std::list<int>& vList)
{
std::list<int>::const_iterator ListIt = vList.begin();
//访问链表
for (; ListIt != vList.end(); ListIt++)
{
std::cout << *ListIt << " ";
}
std::cout << std::endl;
}
int main()
{
addElement(g_List);
printElement(g_List);
std::list<int> TempList;
addElement(TempList);
g_List.merge(TempList); //合并有序链表
printElement(g_List);
addElement(TempList);
g_List.splice(++g_List.begin(), TempList, ++TempList.begin(), TempList.end()); //指定位置结合,第二个参数是第二个链表
printElement(g_List);
addElement(TempList);
g_List.insert(++g_List.begin(), TempList.begin(), TempList.end()); //指定位置插入,插入后链表不清空
printElement(g_List);
return 1;
}
【参考资料】
【1】http://www.cnblogs.com/scandy-yuan/archive/2013/01/08/2851324.html
【2】http://www.cnblogs.com/fangyukuan/archive/2010/09/21/1832364.html