c++STLlist容器成员函数应用实例
发布时间:2010/6/1 9:31:02 来源:城市学习网 编辑:ziteng
#include <iostream>
#include <list>
#include <iterator>
using namespace std;
// insert()和splice()的区别在于,insert()将原始数据的副本插入到目标地址,
// splice() 则将原始区间移到目标地址
// unique() 只能压缩相邻的相同值,如2,2,2会压缩为一个2,而2,3,2 则无法压缩,因此需要先排序
int main()
{
int stuff[5]={1,3,5,7,9};
int more[6] ={2,4,6,8,2,4};
ostream_iterator<int, char> out(cout, " ");
list<int> onelist(5, 2);// 声明一个双向链表onelist,含有5个整数2
list<int> twolist;// 声明一个空的双向链表twolist
twolist.insert(twolist.begin(), stuff, stuff+5);// 将stuff数组元素插入到链表twolist首部
list<int> threelist(twolist);// 声明一个双向链表threelist,与twolist一样元素
threelist.insert(threelist.end(), more, more+6);// 将more数组元素插入到链表threelist尾部
copy(onelist.begin(), onelist.end(), out);cout << "-> oneList" << endl;
copy(twolist.begin(), twolist.end(), out);cout << "-> twoList" << endl;
copy(threelist.begin(), threelist.end(), out);cout << "-> threeList" << endl;
threelist.remove(2);// 删除所有元素等于2的
copy(threelist.begin(), threelist.end(), out);
cout << "-> remove(2) from threeList" << endl;
threelist.splice(threelist.begin(),onelist);//把onelist结合在threelist前面,onelist被清空
copy(threelist.begin(), threelist.end(), out);
cout << "-> splice(beginPos,onelist) from threeList" << endl;
copy(onelist.begin(), onelist.end(), out);
cout << "-> splice()后的oneList为空链表" << endl;
threelist.unique();// 连续相同的元素被压缩为单个元素
copy(threelist.begin(), threelist.end(), out);
cout << "-> threeList.unique() 连续相同的元素被压缩为单个元素" << endl;
threelist.sort();
threelist.unique();
copy(threelist.begin(), threelist.end(), out);
cout << "-> threelist.sort() and threeList.unique() " << endl;
twolist.sort();
threelist.merge(twolist);// 链表合并前必须已排序,合并后twolist被清空
copy(threelist.begin(), threelist.end(), out);
cout << "-> twolist.sort() and threeList.merge(twolist) " << endl;
copy(twolist.begin(), twolist.end(), out);cout << "-> merge()后的twoList为空链表" << endl;
return 0;
}