• cpp学习笔记:STL deque容器


    一、deque与vector的区别

    ①vector对于头部的插入删除数据低,数据量越大,效率越低。

    ②deque相对而言,对头部的插入删除速度比vector快。

    ③vector访问元素时的速度会比deque快,和两者内部实现有关。

    二、deque构造函数

    dequed1;                                        //构造d1

    dequed2(d1.begin(),d1.end());    //把d1开始到结尾构造给d2

    dequed3(10,100);                         //将10个100放入d3

    dequed4=d3;                                 //将d3赋值给d4

    1. #include
    2. #include
    3. void printDeque(const deque<int>& d)
    4. {
    5. for (deque<int>::const_iterator it = d.begin(); it != d.end();it++)
    6. {
    7. cout << *it << " ";
    8. }
    9. cout << endl;
    10. }
    11. void text01()
    12. {
    13. deque<int> d1;
    14. for (int i = 0; i < 10;i++)
    15. {
    16. d1.push_back(i);
    17. }
    18. printDeque(d1);
    19. deque<int> d2(d1.begin(), d1.end());
    20. printDeque(d2);
    21. deque<int> d3(10, 100);
    22. printDeque(d3);
    23. deque<int> d4 = d3;
    24. printDeque(d4);
    25. }

    三、deque赋值操作

    deque d2;        d2 = d1;

    deque d3;        d3.assign(d1.begin(), d1.end());

    deque d4;        d4.assign(10, 100);

    1. #include
    2. #include
    3. void printDeque(const deque<int>& d)
    4. {
    5. for (deque<int>::const_iterator it = d.begin(); it != d.end();it++)
    6. {
    7. cout << *it << " ";
    8. }
    9. cout << endl;
    10. }
    11. void text01()
    12. {
    13. deque<int> d1;
    14. for (int i = 0; i < 10;i++)
    15. {
    16. d1.push_back(i);
    17. }
    18. printDeque(d1);
    19. deque<int> d2;
    20. d2 = d1;
    21. printDeque(d2);
    22. deque<int> d3;
    23. d3.assign(d1.begin(), d1.end());
    24. printDeque(d3);
    25. }

    四、deque大小操作

    empty()                                //判断容器是否为空,返回值=1时为空

    capacity()                            //容器的容量

    size()                                   //返回容器中元素的个数

    resize(int num)                   //重新指定容器的长度为num,

                                                //若容器边长,则默认值填充,变短则超出部分被删除

    resize(int num,elem)         //重新指定容器的长度为num,

                                        //若容器边长,则以elem值填充新位置,若变短,则末尾超出位置被删除

    总结:

                    判断元素是否为空:empty           返回元素的个数:size

                    返回容器容量:capacity               重新指定大小:resize

    1. void text01()
    2. {
    3. deque<int> d1;
    4. for (int i = 0; i < 10; i++)
    5. {
    6. d1.push_back(i);
    7. }
    8. printDeque(d1);
    9. if (d1.empty())
    10. {
    11. cout << "d1为空!" << endl;
    12. }
    13. else
    14. {
    15. cout << "d1不为空!" << endl;
    16. cout << "d1的大小为:" << d1.size() << endl;
    17. }
    18. d1.resize(15, 1);
    19. printDeque(d1);
    20. d1.resize(5);
    21. printDeque(d1);
    22. }

    五、deque插入和删除

    deque d;

    d.push_back(10);  //尾插

    d.push_front(10);   //头插

    d.pop_back();        //尾删

    d.pop_front();         //头删

    d.insert(d.begin(), 2, 10000);      //在开头插入两个10000

    d2.insert(d.begin(), d2.begin(), d2.end());

    d.erase(d.begin());          //删除第一个

    d.erase(d.begin(), d.end());   //删除所有

    d.clear();

    总结:

                    尾插:push_back           尾删:pop_back

                    头插:push_front           头删:pop_front

    1. void text01()
    2. {
    3. deque<int> d;
    4. d.push_back(10); //尾插
    5. d.push_back(20);
    6. d.push_front(10); //头插
    7. d.push_front(20);
    8. printDeque(d);
    9. d.pop_back(); //尾删
    10. d.pop_front(); //头删
    11. printDeque(d);
    12. }
    13. void text02()
    14. {
    15. deque<int> d;
    16. d.push_back(10);
    17. d.push_back(20);
    18. d.push_front(100);
    19. d.push_front(200);
    20. printDeque(d);
    21. d.insert(d.begin(), 2, 10000);
    22. printDeque(d);
    23. d.insert(d.begin(), 2, 1000);
    24. printDeque(d);
    25. deque<int> d2;
    26. d2.push_back(1);
    27. d2.push_back(2);
    28. d2.push_back(3);
    29. d2.insert(d.begin(), d2.begin(), d2.end());
    30. printDeque(d);
    31. }
    32. void text03()
    33. {
    34. deque<int> d;
    35. d.push_back(10);
    36. d.push_back(20);
    37. d.push_front(100);
    38. d.push_front(200);
    39. printDeque(d);
    40. d.erase(d.begin());
    41. printDeque(d);
    42. d.clear();
    43. printDeque(d);
    44. }

    六、deque数据存取

    at(int idx);            //返回索引idx所指的数据

    operator [ ];         //返回索引idx所指的数据

    front();                 //返回容器中第一个数据元素

    back();                //返回容器中最后一个数据元素

    1. void text01()
    2. {
    3. deque<int> d;
    4. d.push_back(10); //尾插
    5. d.push_back(20);
    6. d.push_front(100);
    7. d.push_front(200);
    8. for (int i = 0; i < d.size();i++)
    9. {
    10. cout << d[i] << " ";
    11. }
    12. cout << endl;
    13. for (int i = 0; i < d.size();i++)
    14. {
    15. cout << d.at(i) << " ";
    16. }
    17. cout << endl;
    18. cout << d.front() << endl;
    19. cout << d.back() << endl;
    20. }

    七、deque排序

    sort(d.begin(), d.end());    //排序

    1. void text01()
    2. {
    3. deque<int> d;
    4. d.push_back(10); //尾插
    5. d.push_back(20);
    6. d.push_front(100);
    7. d.push_front(200);
    8. printDeque(d);
    9. sort(d.begin(), d.end());
    10. printDeque(d);
    11. }

    八、案例:评委打分

    1. #include
    2. #include
    3. #include
    4. #include
    5. class Person
    6. {
    7. public:
    8. Person(string name,int score)
    9. {
    10. this->m_Name = name;
    11. this->m_Score = score;
    12. }
    13. string m_Name;
    14. int m_Score;
    15. };
    16. void createPerson(vector&v)
    17. {
    18. string nameSeed = "ABCDE";
    19. for (int i = 0; i < 5;i++)
    20. {
    21. string name = "选手";
    22. name += nameSeed[i];
    23. int score = 0;
    24. Person p(name, score);
    25. v.push_back(p);
    26. }
    27. }
    28. void SetScore(vector&v)
    29. {
    30. for (vector::iterator it = v.begin(); it != v.end();it++)
    31. {
    32. deque<int> d;
    33. for (int i = 0; i < 10;i++)
    34. {
    35. int score = rand() % 41 + 60;
    36. d.push_back(score);
    37. }
    38. //排序
    39. sort(d.begin(), d.end());
    40. //去掉最高分和最低分
    41. d.pop_back();
    42. d.pop_front();
    43. int sum = 0;
    44. for (deque<int>::iterator dit = d.begin(); dit != d.end();dit++)
    45. {
    46. sum += *dit;
    47. }
    48. int avg = sum / d.size();
    49. it->m_Score = avg;
    50. }
    51. }
    52. void showScore(vector&v)
    53. {
    54. for (vector::iterator it = v.begin(); it != v.end();it++)
    55. {
    56. cout << "姓名:" << it->m_Name << " 平均分:" << it->m_Score << endl;
    57. }
    58. }
    59. int main()
    60. {
    61. srand((unsigned int)time(NULL));
    62. vector v;
    63. createPerson(v);
    64. SetScore(v);
    65. showScore(v);
    66. system("pause");
    67. return 0;
    68. }

  • 相关阅读:
    java中的集合框架基础-5
    6. vector
    【业务安全-04】万能用户名及万能密码实验
    SpringBoot+Netty+Vue+Websocket实现在线推送/聊天系统
    Elasticsearch核心技术与实战-05-elasticsearch的安装与简单配置-Windows
    数据结构复盘——第七章:查找和匹配
    【Web前端】一文带你吃透HTML(上篇)
    【实测可行!】vscode连接服务器 waiting for server log,且报错:无法远程连接到服务器
    053基于web+springboot的宠物咖啡馆平台的设计与实现
    C/C++ 文件读写
  • 原文地址:https://blog.csdn.net/ohhjack/article/details/127891678