STL 5.list容器
5.1 双向循环链表
5.2 赋值、构造
5.3 删除方面,有个remove操作,是删除所有与elem匹配的元素
5.4 反转 reverse 质变算法
5.5 排序 sort
5.5.1 默认从小到大,若想改变规则,写回调函数
5.5.2 对于自定义类型,必须要指定排序规则
5.6 案例:给葫芦娃高级排序
5.5.1测试代码:
1 #include"iostream" 2 #include"list" 3 #include"algorithm" 4 using namespace std; 5 6 void printList(const list<int>& L) 7 { 8 for (list<int>::const_iterator it = L.begin(); it != L.end(); it++) 9 { 10 cout << *it << " "; 11 } 12 cout << endl; 13 } 14 15 bool myCompare(int v, int u) 16 { 17 return v > u; 18 } 19 20 void test01() 21 { 22 list<int> myList; 23 list<int> myList2(10, 10); 24 list<int> myList3(myList2.begin(),myList2.end()); 25 list<int> myList4(myList3); 26 27 list<int> myList5; 28 myList5.push_back(10); 29 myList5.push_back(20); 30 myList5.push_back(30); 31 myList5.push_front(100); 32 myList5.push_front(200); 33 myList5.push_front(300); 34 //正序的 35 //300 200 100 10 20 30 36 for (list<int>::iterator it = myList5.begin(); it != myList5.end(); it++) 37 { 38 cout << *it << " "; 39 } 40 cout << endl; 41 42 //逆序的 43 //30 20 10 100 200 300 44 for (list<int>::reverse_iterator it = myList5.rbegin(); it != myList5.rend(); it++) 45 { 46 cout << *it << " "; 47 } 48 cout << endl; 49 50 myList5.insert(myList5.begin(), 1000);//插入操作所需的参数是迭代器 51 myList5.insert(myList5.end(), 300); 52 printList(myList5); 53 54 myList5.remove(300);//移除操作:会将链表中值为参数的都移除(删除所有的匹配的) 55 printList(myList5); 56 } 57 58 //反转与排序 59 void test02() 60 { 61 list<int> myList5; 62 myList5.push_back(10); 63 myList5.push_back(20); 64 myList5.push_back(30); 65 myList5.push_front(100); 66 myList5.push_front(200); 67 myList5.push_front(300); 68 69 //反转是个质变算法 70 myList5.reverse(); 71 printList(myList5); 72 73 //排序 74 //所有系统提供的标准算法,使用的容器的提供的迭代器必须支持随机访问 75 //不支持随机访问的迭代器容器,内部会对应提供相应的算法接口 76 // myList5.sort(); 而不是 sort(myList5.begin(),myList5.end()); 77 myList5.sort(); //默认的从小到大 78 79 //修改为从大到小,需要提供回调函数 80 myList5.sort(myCompare); 81 printList(myList5); 82 } 83 84 int main() 85 { 86 //test01(); 87 test02(); 88 system("pause"); 89 return 0; 90 }
5.5.2测试代码:
1 #include"iostream" 2 #include"list" 3 #include"algorithm" 4 #include"string" 5 using namespace std; 6 7 class Person 8 { 9 public: 10 string myname; 11 int myage; 12 int myheight; 13 Person(string name, int age, int height) 14 { 15 this->myname = name; 16 this->myage = age; 17 this->myheight = height; 18 } 19 ~Person() 20 { 21 }; 22 }; 23 24 void printList(const list<Person>& L) 25 { 26 for (list<Person>::const_iterator it = L.begin(); it != L.end(); it++) 27 { 28 cout << "名字: " << it->myname << "年龄:" << it->myage << "身高:" << it->myheight << endl; 29 } 30 cout << endl; 31 } 32 33 //两个排序条件选择:先看年龄,升序;年龄相同看身高,降序 34 bool mycompare(Person& p1, Person& p2) 35 { 36 if (p1.myage == p2.myage) 37 { 38 return p1.myheight > p2.myheight; 39 } 40 else 41 { 42 return p1.myage < p2.myage; 43 } 44 } 45 void test() 46 { 47 list<Person> L; 48 49 Person p1("dawa", 30, 180); 50 Person p2("erwa", 27, 160); 51 Person p3("sanwa", 26, 158); 52 Person p4("siwa", 26, 194); 53 Person p5("wuwa", 26, 170); 54 Person p6("yeye", 90, 188); 55 Person p7("shejing", 90, 12); 56 Person p8("xiejiang", 80, 1099); 57 58 L.push_back(p1); 59 L.push_back(p2); 60 L.push_back(p3); 61 L.push_back(p4); 62 L.push_back(p5); 63 L.push_back(p6); 64 L.push_back(p7); 65 L.push_back(p8); 66 67 printList(L); 68 69 cout << "排序后:" << endl; 70 L.sort(mycompare); 71 printList(L); 72 } 73 74 int main() 75 { 76 test(); 77 system("pause"); 78 return 0; 79 }

浙公网安备 33010602011771号