c++list容器

#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;

}

猜你喜欢

转载自blog.csdn.net/tulipless/article/details/81135436