1.list基本概念
链表(list)是一种物理存储单元上的非连续的存储结构,数据元素的逻辑顺序是通过链表中的指针链接实现的;将数据进行链式存储。
是一个双向循环链表;
链表由一系列结点组成;
结点的组成:一个是存储数据元素的数据域,另一个是存储下一个结点的指针域;
优点:可以对任意位置快速插入或删除元素;
缺点:遍历速度没有数组快,占用空间比数组大;
由于链表的存储方式并不是连续的内存空间,因此链表list中的迭代器只支持前移和后移,属于双向迭代器;
list有个重要的性质,插入操作和删除操作都不会造成原有list迭代器失效,这在vector是不成立的;
2.list构造函数
3.list赋值和交换
4.list大小操作
5.list插入和删除
函数原型:
- push_back ( elem );//在容器尾部加入一个元元素
- pop _ back();//除容器中最后一个元素
- push _ front ( elem )/在容器开头播入一个元素
- pop _ front ();//从容器开头移除第一个元素
- insert ( pos , elem )://在 pos 位置插 elem 元素的的拷贝,返回新数据的位置。
- insert ( pos , n , elem )://在 pos 位置插入 n 个 elelem 数据,无返回值。
- insert ( pos , beg , end )// 在 pos 位置插入[ beg , end )区间的数据,无返回值。
- cleart ();//移除容器的所有数抵
- erase ( beg , end )://删除[ beg,end )区间的数据据,返回下一个数据的位置,
- erase ( pos );//除 pos 位置的故据,返回下一个数据的位置。
- remove ( elem )//删除容器中所有与 elem 值值匹配的元素。
6.list数据存取
- front();
- back();
不可以用中括号和at来访问list里的元素,原因是list空间不是连续的;
7.list反转和排序
- reverse();//反转链表
- sort();//排序
如果想要降序的话,重载一个函数:
1 #include<iostream> 2 #include<list> 3 #include<string> 4 using namespace std; 5 6 //案例:将person自定义类型进行排序,person中属性有姓名,年龄,身高,按照年龄进行升序,若年龄相同,按身高; 7 8 class Person 9 { 10 public: 11 Person(string n, int a, int h) 12 { 13 this->m_name = n; 14 this->m_age = a; 15 this->m_height = h; 16 } 17 18 string m_name; 19 int m_age; 20 int m_height; 21 }; 22 23 void myprint(list<Person> l) 24 { 25 for (list<Person>::iterator it = l.begin(); it != l.end(); it++) 26 { 27 cout << (*it).m_name << "\t" << (*it).m_age << "\t" << (*it).m_height << endl; 28 } 29 30 } 31 32 //指定排序规则 33 bool compare(Person p1,Person p2) 34 { 35 //按照年龄升序 36 if (p1.m_age == p2.m_age) 37 { 38 return p1.m_height < p2.m_height; 39 } 40 else { return p1.m_age < p2.m_age; } 41 } 42 43 void test01() 44 { 45 list<Person> L; 46 Person p1("aa", 20, 180); 47 Person p2("bb", 35, 178); 48 Person p3("cc", 34, 180); 49 Person p4("dd", 20, 165); 50 Person p5("ee", 35, 185); 51 L.push_back(p1); 52 L.push_back(p2); 53 L.push_back(p3); 54 L.push_back(p4); 55 L.push_back(p5); 56 57 L.sort(compare); 58 myprint(L); 59 } 60 61 int main() 62 { 63 test01(); 64 }
标签:容器,list,back,pos,链表,Person,elem From: https://www.cnblogs.com/hello-205112/p/17629381.html