#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <list>
using namespace std;
class Person
{
public:
Person(int age) :age(age) {}
int age;
};
bool myCompare1(int &a, int &b)
{
return a > b;
}
bool myCompare2(Person &p1, Person &p2)
{
return p1.age > p2.age;
}
//list意义为链表
int main()
{
//初始化
list<int> l1;
list<int> l2(10, 5);//10个元素,每个元素为5
list<int> l3(l2);//拷贝构造
list<int> l4(l2.begin(), l2.end());//区间赋值
//遍历
list<int>::iterator it = l4.begin();
while (it != l4.end())
{
cout << *it << " ";
it++;
}
cout << endl;
//list插入删除
list<int> l5;
l5.push_back(10);
l5.push_front(20);
l5.push_front(30);
l5.push_front(40);
l5.push_front(50);
l5.insert(l5.begin(), 30);
//l5.insert(15.begin() + 2, 40);//这是错误的,因为这是链表,不是数组,内存区间是不连续的
//正确的写法
list<int>::iterator it2 = l5.begin();//迭代器只可以加加的
it2++;
it2++;
l5.insert(it2, 50);
//删除
l5.pop_back();
l5.pop_front();
l5.remove(50);//删除所有匹配值,list独有的
l5.erase(l5.begin(), l5.end());
l5.clear();
//赋值操作
l5.assign(10, 5);//赋值10个元素,每个元素为5
l5.push_front(10);
l5.reverse();//链表反序
it2 = l5.begin();
while (it2 != l5.end())
{
cout << *it2 << " ";
it2++;
}
cout << endl;
//list容器本身就带有一个sort()函数,进行排序
//为什么list本身也提供一个sort()函数
//因为算法中的sort只排序支持可随机访问的容器,list为不可随机访问容器
//支持可随机访问的容器,运用算法,才可以高效的进行逻辑运算,不支持随机访问的容器,运用算法效率就太低下了,因此算法sort就直接不支持不可以随机访问的容器排序
l5.sort();//默认是从小到大
l5.sort(myCompare1);//自己指定方法,从大到小排序
//如果list容器中是对象,需要我们自己制定排序方法
list<Person> l6;
Person p1(6);
Person p2(3);
Person p3(9);
l6.push_back(p1);
l6.push_back(p2);
l6.push_back(p3);
l6.sort(myCompare2);
return 0;
}