#include<list>
#include<string>
#include<iostream>
#include<algorithm>
using namespace std;
//STL中的链表是一个双向循环链表
//链表的迭代中只支持前移和后移
void printList(const list<int>& l) {
for (list<int>::const_iterator it = l.begin(); it != l.end(); it++) {
cout << *it << " ";
}
cout << endl;
}
#if 0
//ONE: list 构造函数
void test1() {
//创建list容器
//idea1: 默认构造
list<int>l1;
//添加数据
l1.push_back(1);
l1.push_back(2);
l1.push_back(3);
l1.push_back(4);
//遍历容器
cout << "默认构造:" << endl;
printList(l1);
//idea2: 区间方式构造
list<int>l2(l1.begin(),l1.end());
cout << "区间构造:" << endl;
printList(l2);
//拷贝构造
list<int>l3(l2);
cout << "拷贝构造:" << endl;
printList(l3);
//n个element
list<int>l4(10, 1000);
cout << "n个element:" << endl;
; printList(l4);
}
#endif
#if 0
void test2() {
//TWO: 赋值
list<int>l1;
//添加数据
l1.push_back(1);
l1.push_back(2);
l1.push_back(3);
l1.push_back(4);
list<int>l2;
//重载operator=赋值
l2 = l1;
cout << "重载operator=赋值:" << endl;
printList(l2);
list<int>l3;
l3.assign(l2.begin(), l2.end());
cout << "利用assign区间赋值:" << endl;
printList(l3);
list<int>l4;
l4.assign(10, 100);
cout << "n个element:" << endl;
printList(l4);
}
#endif
#if 0
//THREE 交换元素
void test3() {
list<int>l1;
//添加数据
l1.push_back(1);
l1.push_back(2);
l1.push_back(3);
l1.push_back(4);
//利用swap交换list中的元素
list<int>l2;
l2.assign(10, 100);
cout << "交换前:" << endl;
cout << "list1:" << endl;
printList(l1);
cout << "list2:" << endl;
printList(l2);
cout << "交换后:" << endl;
l1.swap(l2);
cout << "list1:" << endl;
printList(l1);
cout << "list2:" << endl;
printList(l2);
}
#endif
#if 0
//FOUR: list大小操作
void test4() {
list<int>l1;
//添加数据
l1.push_back(1);
l1.push_back(2);
l1.push_back(3);
l1.push_back(4);
printList(l1);
//判断容器是否为空
if (l1.empty()) {
cout << "empty" << endl;
}
else
{
cout << "not empty" << endl;
cout << "list1的元素个数:" << l1.size() << endl;
}
//重新指定元素个数
l1.resize(10);//多余空间默认用0来填充
cout << "多余部分自动用0补充:" << endl;
printList(l1);
l1.resize(2);
cout << "超出size部分会被删除掉: " << endl;
printList(l1);//超出size部分会被删除掉
}
#endif
#if 0
void test5() {
//FIVE: list插入和删除
list<int>l1;
cout << "尾插:" << endl;
l1.push_back(1);
l1.push_back(2);
l1.push_back(3);
cout << "头插:" << endl;
l1.push_front(10);
l1.push_front(20);
l1.push_front(30);
printList(l1);
cout << "尾删:" << endl;
l1.pop_back();
printList(l1);
cout << "头删:" << endl;
l1.pop_front();
printList(l1);
//在迭代器位置插入
cout << "insert 迭代器位置插入:" << endl;
l1.insert(l1.begin(), 1000);
l1.insert(l1.end(), 22);
printList(l1);
//迭代器位置删除
list<int>::iterator it;
it = l1.begin();
cout << "迭代器位置删除:" << endl;
l1.erase(it);
printList(l1);
//移除: 删除与输入值所有相匹配的元素
l1.push_back(10000);
l1.push_back(10000);
l1.push_back(10000);
cout << "移除前:" << endl;
printList(l1);
cout << "移除后:" << endl;
l1.remove(10000);
printList(l1);
cout << "clear: " << endl;
l1.clear();
printList(l1);
}
#endif
#if 0
//SIX: 数据存取
void test6() {
list<int>l1;
//添加数据
l1.push_back(1);
l1.push_back(2);
l1.push_back(3);
l1.push_back(4);
printList(l1);
//list的迭代器不支持随机访问
//l1[0] 不可以用[]访问list容器中的元素
//list中没有成员at: list本质是链表
cout << "第一个元素:" << l1.front() << endl;
cout << "最后一个元素:" << l1.back() << endl;
//验证迭代器是不支持随机访问的
list<int>::iterator it = l1.begin();
//迭代器支持双向
it++;
it--;
//it = it + 1; //不支持随机访问
}
#endif
#if 0
//SEVEN: 反转和排序
void test7() {
list<int>l1;
//添加数据
l1.push_back(1);
l1.push_back(2);
l1.push_back(4);
l1.push_back(3);
printList(l1);
cout << "反转后:" << endl;
l1.reverse();
printList(l1);
//所有不支持随机访问迭代器的容器不可以用标准的算法
//不支持随机访问迭代器的容器,内部会提供一些对应算法
//sort(l1.begin(), l1.end()); //wrong
l1.sort();//调用list的成员函数
cout << "排升序后:" << endl;
printList(l1);
}
#endif
int main02() {
system("pause");
return 0;
}