#define _CRT_SECURE_NO_WARNINGS 1 #include <iostream> #include <List> using namespace std; template <class T> void printList(const list<T>& l) { for (class list<T> ::const_iterator it = l.begin(); it != l.end(); it++) { cout << *it << " "; } cout << endl; } void test01() { //list的构造函数 //list<T> lst; //默认构造,list采用模板类实现 //list(begin, end); //构造函数,利用迭代器实现区间赋值 //list(n, elem); //构造函数,将n个elem赋值给本身 //list(const list & lst); //拷贝构造 list<int> l1; l1.push_back(10); l1.push_back(20); l1.push_back(30); l1.push_back(40); l1.push_back(50); list<int> l2(l1.begin(), l1.end()); list<float> l3(5, 100.00f); list<float> l4(l3); printList(l1); printList(l2); printList(l3); printList(l4); } void test02() { //list的赋值和交换 //list& operator=(const list & lst); //重载赋值运算符 //assign(begin, end); //利用迭代器实现区间赋值 //assign(n, elem); //将n个elem赋值给本身 //swap(lst); list<int> l1; l1.push_back(10); l1.push_back(20); l1.push_back(30); l1.push_back(40); l1.push_back(50); list<int> l2; l2.assign(l1.begin(), l1.end()); printList(l1); printList(l2); } void test03() { //size(); //返回容器中元素个数 //empty(); //判断容器是否为空 //resize(num); //重新指定容器长度,若变长,变长的部分赋值为0,若变短,超出容器长度的元素被删除 //resize(num, elem); //重新指定容器长度,若变长,变长的部分赋值为elem,若变短,超出容器长度的元素被删除 list<int> l1; l1.push_back(10); l1.push_back(20); l1.push_back(30); l1.push_back(40); l1.push_back(50); cout << l1.size() << endl; l1.resize(10); cout << l1.size() << endl; //链表只有size,没有capacity } void test04() { //list的插入和删除 //1.push_back(elem); //在容器尾部插入一个元素 //2.push_front(elem); //在容器头部插入一个元素 //3.pop_back(); //在容器尾部删除一个元素 //4.pop_front(); //在容器头部删除一个元素 //5.insert(pos, elem); //在迭代器pos处插入一个元素elem,返回新数据的位置 //6.insert(pos, n, elem); //在迭代器pos处插入n个元素elem,无返回值 //7.insert(pos, begin, end);//在迭代器pos处插入[begin,end)区间的数据,无返回值 //8.clear(); //清除容器中所有数据 //9.erase(begin, end); //删除[begin,end)区间的数据,返回下一个数据的位置 //10.erase(pos); //删除迭代器pos处的数据,返回下一个数据的位置 //11.remove(elem); //删除容器中所有等于elem的元素 //12front(); //返回容器第一个元素 //13.back(); //返回容器最后一个元素 list<int> l1; l1.push_back(10); l1.push_back(20); l1.push_back(30); l1.push_back(40); l1.push_back(50); l1.remove(50); printList(l1); l1.insert(l1.end(), 50); printList(l1); //l1.erase(l1.end() - 1) //写法错误,链表不支持随机访问,既不能对迭代器进行加减常数 //但是支持自增自减 l1.erase(--l1.end()); printList(l1); } class Person { public: Person(const int& w_age, const string& w_name, const double& w_height) { this->age = w_age; this->name = w_name; this->height = w_height; } int age{}; string name; double height; }; //注意这里的回调函数不能写在类Person的上面,因为回调函数的形参是Person类 //使用Person类此前必须有声明 bool myCompare(Person p1, Person p2) { //如果年龄相等,就按身高由大到小排列 if (p1.age == p2.age) return p1.height > p2.height; return p1.age > p2.age; } void test05() { //list的反转与排序 //reverse(); //反转链表 //.sort(); //排序链表。注意这是一个成员函数, list<int> l1; l1.push_back(49); l1.push_back(19); l1.push_back(40); l1.push_back(39); l1.push_back(9); //如果容器支持随机访问,则可以采用系统标准的算法进行排序 //如果不支持,则采用容器的成员函数进行排序 //如果要从大到小排列,就要加一个回调函数 //l1.sort(myCompare) l1.sort(); printList(l1); l1.reverse(); printList(l1); //自定义类型的数据排序 Person p1(200, "张三", 190.72); Person p2(300, "赵四", 170.20); Person p3(100, "王五", 177.32); Person p4(100, "钱六", 188.45); Person p5(100, "李七", 170.14); list<Person> l2; l2.push_back(p1); l2.push_back(p2); l2.push_back(p3); l2.push_back(p4); l2.push_back(p5); //现在按照一个年龄从大到小排序 l2.sort(myCompare); for (list<Person> :: iterator it = l2.begin(); it != l2.end(); it++) { cout << "name:" << it->name << " age:" << it->age << " height:" << it->height << endl; } } int main() { test01(); test02(); test03(); test04(); test05(); return 0; }
运行结果: