当前位置:   article > 正文

2021年11月16日 C++ STL queue&&list&&set_c++ std queue list

c++ std queue list

queue

  1. 构造函数:
  2. queue<T> que; "queue采用模板类实现,queue对象的默认构造形式"
  3. queue(const queue &que); "拷贝构造函数"
  4. 赋值操作:
  5. queue& operator=(const queue &que); "重载等号操作符"
  6. 数据存取:
  7. push(elem); "往队尾添加元素"
  8. pop(); "从队头移除第一个元素"
  9. back(); "返回最后一个元素"
  10. front(); "返回第一个元素"
  11. 大小操作:
  12. empty(); "判断堆栈是否为空"
  13. size(); "返回栈的大小"

注意:队列不支持迭代器,也不允许随机访问。

List  

list的迭代器只能  "++"  和  "--"  ,不能  " it = it + 1; " 

lisst本质是“双向”+“循环”链表。

list的创建 

  1. list<T> lst; "list采用采用模板类实现,对象的默认构造形式:"
  2. list(beg,end); "构造函数将[beg, end)区间中的元素拷贝给本身。"
  3. list(n,elem); "构造函数将n个elem拷贝给本身。"
  4. list(const list &lst); "拷贝构造函数。"

list的赋值和交换 

  1. L2 = L1; ""
  2. L3.assign(L2.begin(), L2.end());
  3. L4.assign(10, 100);
  4. L1.swap(L2);

 list大小操作

  1. size(); "返回容器中元素的个数"
  2. empty(); "判断容器是否为空"
  3. resize(num); "重新指定容器的长度为num,若容器变长,则以默认值填充新位置。"
  4. "如果容器变短,则末尾超出容器长度的元素被删除。"
  5. resize(num, elem); "重新指定容器的长度为num,若容器变长,则以elem值填充新位置。"
  6. "如果容器变短,则末尾超出容器长度的元素被删除。"

 list的插入和删除

  1. push_back(elem); "在容器尾部加入一个元素"
  2. pop_back(); "删除容器中最后一个元素"
  3. push_front(elem);"在容器开头插入一个元素"
  4. pop_front(); "从容器开头移除第一个元素"
  5. insert(pos,elem); "在pos位置插elem元素的拷贝,返回新数据的位置。"
  6. insert(pos,n,elem); "在pos位置插入n个elem数据,无返回值。"
  7. insert(pos,beg,end); "在pos位置插入[beg,end)区间的数据,无返回值。"
  8. clear(); "移除容器的所有数据"
  9. erase(beg,end); "删除[beg,end)区间的数据,返回下一个数据的位置。"
  10. erase(pos); "删除pos位置的数据,返回下一个数据的位置。"
  11. remove(elem); "删除容器中所有与elem值匹配的元素。"

list数据存取 

  1. front(); "返回第一个元素。"
  2. back(); "返回最后一个元素。"

list的反转和排序 

  1. reverse(); "反转链表"
  2. sort(); "链表排序"

Example:按年龄排序,如果同龄则按照身高排序;

  1. #include <list>
  2. #include <string>
  3. class Person {
  4. public:
  5. Person(string name, int age , int height) {
  6. m_Name = name;
  7. m_Age = age;
  8. m_Height = height;
  9. }
  10. public:
  11. string m_Name; //姓名
  12. int m_Age; //年龄
  13. int m_Height; //身高
  14. };
  15. bool ComparePerson(Person& p1, Person& p2) {
  16. if (p1.m_Age == p2.m_Age) {
  17. return p1.m_Height > p2.m_Height;
  18. }
  19. else
  20. {
  21. return p1.m_Age < p2.m_Age;
  22. }
  23. }
  24. void test01() {
  25. list<Person> L;
  26. Person p1("刘备", 35 , 175);
  27. Person p2("曹操", 45 , 180);
  28. Person p3("孙权", 40 , 170);
  29. Person p4("赵云", 25 , 190);
  30. Person p5("张飞", 35 , 160);
  31. Person p6("关羽", 35 , 200);
  32. L.push_back(p1);
  33. L.push_back(p2);
  34. L.push_back(p3);
  35. L.push_back(p4);
  36. L.push_back(p5);
  37. L.push_back(p6);
  38. for (list<Person>::iterator it = L.begin(); it != L.end(); it++) {
  39. cout << "姓名: " << it->m_Name << " 年龄: " << it->m_Age
  40. << " 身高: " << it->m_Height << endl;
  41. }
  42. cout << "---------------------------------" << endl;
  43. L.sort(ComparePerson); //排序
  44. for (list<Person>::iterator it = L.begin(); it != L.end(); it++) {
  45. cout << "姓名: " << it->m_Name << " 年龄: " << it->m_Age
  46. << " 身高: " << it->m_Height << endl;
  47. }
  48. }
  49. int main() {
  50. test01();
  51. system("pause");
  52. return 0;
  53. }

set&&multiset

set不允许容器中有重复的元素

multiset允许容器中有重复的元素 

set的创建

  1. set<T> st; "默认构造函数:"
  2. set(const set &st); "拷贝构造函数"
  3. set& operator=(const set &st); "重载等号操作符"

set的大小和交换

  1. size(); "返回容器中元素的数目"
  2. empty(); "判断容器是否为空"
  3. swap(st); "交换两个集合容器"

set的插入和删除

  1. insert(elem); "在容器中插入元素。"
  2. clear(); "清除所有元素"
  3. erase(pos); "删除pos迭代器所指的元素,返回下一个元素的迭代器。"
  4. erase(beg, end); "删除区间[beg,end)的所有元素 ,返回下一个元素的迭代器。"
  5. erase(elem); "删除容器中值为elem的元素。这个好!!!"

set的查找和统计 

  1. find(key); "查找key是否存在,若存在,返回该键的元素的迭代器;若不存在,返回set.end();"
  2. count(key); "统计key的元素个数(其实只有 0 or 1 这两种情况)"
  3. set<int>::iterator pos = s1.find(30); " 用迭代器来查找"
  4. "以下代码用来判断到底有没有这个元素"
  5. if (pos != s1.end())
  6. {
  7. cout << "找到了元素 : " << *pos << endl;
  8. }
  9. else
  10. {
  11. cout << "未找到元素" << endl;
  12. }

set和multiset的区别 

set不可以插入重复数据,

而multiset可以 set插入数据的同时会返回插入结果,表示插入是否成功

multiset不会检测数据,因此可以插入重复数据

pair对组的创建

  1. pair<type, type> p ( value1, value2 );
  2. pair<type, type> p = make_pair( value1, value2 );
  3. "对组创建"
  4. void test01()
  5. {
  6. pair<string, int> p(string("Tom"), 20);
  7. cout << "姓名: " << p.first << " 年龄: " << p.second << endl;
  8. pair<string, int> p2 = make_pair("Jerry", 10);
  9. cout << "姓名: " << p2.first << " 年龄: " << p2.second << endl;
  10. }

 set自定义排序

  1. set<int,MyCompare> s2;
  2. set<Person, comparePerson> s;
  3. "如果是自定义的数据类型,比如结构体,那么就必须告诉set排序的标准"

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/在线问答5/article/detail/1001757
推荐阅读
相关标签
  

闽ICP备14008679号