链表容器,需要注意的是:
list由于是链表,只能通过cur->nxt访问先一个结点,所以不支持随机存取
# include<iostream>
# include<algorithm>
# include<list>
using namespace std;
int arr[] = {5,9,1,6,7};
void printLst(list<int> &lst)
{
for(list<int>::iterator it = lst.begin();it != lst.end();++it)
cout << *it << " ";
cout << endl;
}
void test1()
{//初始化 赋值
list<int> lst1;
lst1.assign(arr,arr+sizeof(arr)/sizeof(int));
cout << "初始化:" << endl;
printLst(lst1);
list<int> lst2 = lst1;
cout << "重载=:" << endl;
printLst(lst2);
list<int> lst3(lst1.begin(),lst1.end());
printLst(lst3);
}
void test2()
{//大小,存取操作
list<int> lst1;
lst1.assign(arr,arr+sizeof(arr)/sizeof(int));
if(!lst1.empty())
cout << "list.size:" << lst1.size() << endl;
for(list<int>::iterator it = lst1.begin();it != lst1.end();++it)
cout << *it << " ";
cout << endl;
cout << "输出首尾:" << lst1.front() << " " << lst1.back() << endl;
cout << "输出第三个:";
list<int>::iterator it = lst1.begin();
it++;
it++;
cout << *it << endl;
}
void test3()
{//插入删除
list<int> lst;
lst.assign(arr,arr+sizeof(arr)/sizeof(int));
printLst(lst);
lst.push_front(100);
lst.push_back(500);
cout << "--------" << endl;
cout << "插入100,500:" << endl;
printLst(lst);
lst.pop_back();
lst.pop_front();
cout << "--------" << endl;
cout << "弹出首尾:" << endl;
printLst(lst);
cout << "--------" << endl;
cout << "insert(pos,elem):" << endl;
list<int>::iterator it = lst.begin();
it++;
it++;
lst.insert(it,500);
printLst(lst);
cout << "--------" << endl;
cout << "删除插入元素:" << endl;
it = lst.begin();
it++;
it++;
lst.erase(it);
printLst(lst);
cout << "--------" << endl;
cout << "首位置插入5个100:" << endl;
lst.insert(lst.begin(),5,1000);
printLst(lst);
cout << "--------" << endl;
cout << "删除插入元素" << endl;
it = lst.begin();
int n = 5;
while(n--)
it++;
lst.erase(lst.begin(),it);
printLst(lst);
}
bool cmp(int a,int b)
{
return a > b;
}
void test4()
{//list转置,排序
list<int> lst;
lst.assign(arr,arr + sizeof(arr)/sizeof(int));
printLst(lst);
cout << "--------" << endl;
lst.reverse();
printLst(lst);
cout << "--------" << endl;
lst.sort();
printLst(lst); //默认从小到大
cout << "--------" << endl;
lst.sort(cmp);
printLst(lst);
}
int main()
{
//test1();//初始化,赋值
//test2();//大小存取操作
//test3();//插入、删除操作
test4();//转置,排序
return 0;
}
运行结果:
test1:
test2:
test3:
test4: