zoukankan      html  css  js  c++  java
  • Cpp STL中的数据结构

    前言:

      C++STL 之所以得到广泛的赞誉,也被很多人使用,不只是提供了像vector, string, list等方便的容器,更重要的是STL封装了许多复杂的数据结构算法和大量常用数据结构操作。vector封装数组,list封装了链表,map和set封装了二叉树等,在封装这些数据结构的时候,STL按照程序员的使用习惯,以成员函数方式提供的常用操作,如:插入、排序、删除、查找等。让用户在STL使用过程中,并不会感到陌生。(摘自博客园博主蔡军帅

    下面就让我们一起来学习STL中的那些强大的容器吧!

    一、栈(stack)

    1.Definition :

      微软翻译:stack—— n. 堆栈;一堆;大量;许多;v.(使)放成整齐的一叠(或一摞、一堆)。

      百度百科:栈(stack)又名堆栈,它是一种运算受限的线性表。限定仅在表尾进行插入和删除操作的线性表。这一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。

    2.头文件:#include<stack>

    3.定义stack类型:stack<type> s;(其中type为数据类型:如int、float、char等)

    4.Correlation operation:

      (1)s.push(item);  //将item压入栈顶

      (2)s.pop();   //删除栈顶的元素,但不会返回

      (3)s.top();  //返回栈顶的元素,但不会删除

      (4)s.size();  //返回栈中元素的个数

      (5)s.empty();  //检查栈是否为空,如果为空返回true,否则返回false

    二、队列(queue)

    1.Definition:

      微软翻译:queue—— n. 行列;(储存的数据)队列;v.(人、车等)排队等候;(使)排队;列队等待

      百度百科:队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表。进行插入操作的端称为队尾,进行删除操作的端称为队头。队列中没有元素时,称为空队列。队列的数据元素又称为队列元素。在队列中插入一个队列元素称为入队,从队列中删除一个队列元素称为出队。因为队列只允许在一端插入,在另一端删除,所以只有最早进入队列的元素才能最先从队列中删除,故队列又称为先进先出(FIFO—first in first out)线性表

    2.头文件:#include<queue>

    3.定义queue类型:queue<type> que;(其中type为数据类型,如int、float、char)

    4.Correlation operation:

      (1)q.push(item);  //将item压入队列尾部

      (2)q.pop();  //删除队首元素,但不返回 

      (3)q.front();  //返回队首元素,但不删除

      (4)q.back();  //返回队尾元素,但不删除

      (5)q.size();  //返回队列中元素的个数 

      (6)q.empty();  //检查队列是否为空,如果为空返回true,否则返回false

    三、动态数组(Vector)

    1.Definition:

      微软翻译:vector —— n.向量;矢量;载体;(航空器的)航线;v.【航】(对飞行中的飞机)指示航向;【航】电(磁)波导航

      百度百科:vector是C++标准模板库中的部分内容,中文偶尔译作“容器”,但并不准确。它是一个多功能的,能够操作多种数据结构和算法的模板类和函数库。vector之所以被认为是一个容器,是因为它能够像容器一样存放各种类型的对象,简单地说,vector是一个能够存放任意类型的动态数组,能够增加和压缩数据。

    2.头文件:#include<vector>

    3.定义vector类型:vector<type> vec; 

    4.Correlation operation:

    ------------------------------------------------------------------------------------------------------------------------------      

          (1)尾部插入数字:vec.push_back(a);      

          (2)使用下标访问元素:cout<<vec[0]<<endl;记住下标是从0开始的。

          (3)使用迭代器访问元素:
              vector<int>::iterator it;
              for(it=vec.begin();it!=vec.end();it++)
              cout<<*it<<endl;
          (4)插入元素: vec.insert(vec.begin()+i,a);在第i+1个元素前面插入a;
          (5)删除元素: vec.erase(vec.begin()+2);删除第3个元素

                  vec.erase(vec.begin()+i,vec.end()+j);删除区间[i,j-1];区间从0开始
          (6)向量大小:vec.size();
          (7)清空:vec.clear();

          (8)使用at()函数访问元素:cout<<vec.at(i)<<endl;

          (8)用算法reverse实现逆序:

              1) 使用reverse将元素翻转:需要头文件#include<algorithm>

               reverse(vec.begin(),vec.end());将元素翻转,即逆序排列!

    摘自:CSDN博主:那年聪聪

    -----------------------------------------------------------------------------------------------------------------------------

    四、Set

    1.Definition:

        微软翻译:n. 集;集合;一套;电视机;v. 设置;放;树立;安排 

        CSDN博主蔡军帅:关于set,必须说明的是set关联式容器。set作为一个容器也是用来存储同一数据类型的数据类型,并且能从一个数据集合中取出数据,在set中每个元素的值都唯一,而且系统能根据元素的值自动进行排序。应该注意的是set中数元素的值不能直接被改变。C++ STL中标准关联容器set, multiset, map, multimap内部采用的就是一种非常高效的平衡检索二叉树:红黑树,也称为RB树(Red-Black Tree)。RB树的统计性能要好于一般平衡二叉树,所以被STL选择作为了关联容器的内部结构。

    2.头文件:#include<set>

    set使用方法:

    begin()     ,返回set容器的第一个迭代器

    end()    ,返回set容器的最后一个迭代器

    clear()        ,删除set容器中的所有的元素

    empty()   ,判断set容器是否为空

    max_size()   ,返回set容器可能包含的元素最大个数

    size()     ,返回当前set容器中的元素个数

    rbegin    ,返回的值和end()相同

    rend()    ,返回的值和rbegin()相同

    lower_bound(key_value) ,返回第一个大于或等于key_value的定位器

    upper_bound(key_value),返回第一个一个大于key_value的定位器

    如果找不到目标值迭代器等于end()  用upper_bound()==end()判断即可

    五、Deque

  • 相关阅读:
    服务器状态码
    QuerySet中添加Extra进行SQL查询
    django配置一个网站建设
    MySQL数据库查询中的特殊命令
    125. Valid Palindrome
    121. Best Time to Buy and Sell Stock
    117. Populating Next Right Pointers in Each Node II
    98. Validate Binary Search Tree
    91. Decode Ways
    90. Subsets II
  • 原文地址:https://www.cnblogs.com/Cnxz/p/12313780.html
Copyright © 2011-2022 走看看