STL中的几个容器的理解与应用

STL的代码从广义上讲分为三类:algorithm(算法container(容器)iterator(迭代器几乎所有的代码都采用了模板类和模版函数的方式。

在C++标准中,STL被组织为下面的13个头文件:<algorithm>、<deque>、<functional>、<iterator>、<vector>、<list>、<map>、<memory>、<numeric>、<queue>、<set>、<stack>和<utility>。

举例来说,一个求方根的函数,在使用浮点数作为其参数类型的情况下的可重用性肯定比使用整型作为它的参数类性要高。而C++通过模板的机制允许推迟对某些类型的选择,直到真正想使用模板或者说对模板进行特化的时候,STL就利用了这一点提供了相当多的有用算法。它是在一个有效的框架中完成这些算法的——你可以将所有的类型划分为少数的几类,然后就可以在模版的参数中使用一种类型替换掉同一种类中的其他类型。

简而言之就是给你建立好了很多有用的库函数,在我们使用的过程中在对应的东西不同的时候,我们可以根据自己的需要采用不一样的库模板和数据类型,这样很方便我们的一些做题啊什么的。这里简单的写了几个今天用到的容器的使用的类型,与经常被使用的一些函数,详细的了解会在之后介绍。

1.vector

vector是一种能够存放任意类型的的动态数组。顾名思义,它是可变的,当程序员无法知道自己需要的数组的规模多大时,用其来解决问题可以达到最大节约空间的目的.为了可以使用vector,必须在头文件里面加上#include<vector>,还有一定要加上using namespace std;

变量声明:

   如果是声明一个int向量以替代一维的数组:vector <int> a;(等于声明了一个int数组a[],大小没有指定,可以动态的向里面添加删除)。

   如果是用vector代替二维数组.其实只要声明一个一维数组向量即可,而一个数组的名字其实代表的是它的首地址,所以只要声明一个地址的向量即可,即:vector <int *> a

一些常见的函数应用:

c.clear()   移除容器中所有数据。  c.empty() 判断容器是否为空。 c.erase(pos)  删除pos位置的数据

 c.erase(beg,end) 删除[beg,end)区间的数据        c.front()  传回第一个数据。   

 c.back():传回最后一个数据,不检查这个数据是否存在。

c.insert(pos,elem)  在pos位置插入一个elem拷贝    c.pop_back()     删除最后一个数据。

 c.push_back(elem) 在尾部加入一个数据。c.resize(num)     重新设置该容器的大小

c.size()      回容器中实际数据的个数。c.at (pos) 得到编号位置的数据

2:map

  map是STL的一个关联容器,它提供一对一(其中第一个可以称为关键字,每个关键字只能在map中出现一次,第二个可能称为该关键字的值)的数据处理能力,并且在map内部所有的数据都是有序的。

map的构造:map<数据类型, 数据类型>变量名称。

map中数据的插入有两种,使用下标和使用insert函数。在map中使用下标访问不存在的元素将导致在map容器中添加一个新的元素。

map的元素查找,如果只是查找该元素是否存在,可以使用函数count(k),该函数返回的是k出现的次数;若是想取得k对应的值,可以使用函数find(k),该函数返回的是指向该元素的迭代器。

map的元素删除:

从map中删除元素的函数是erase(),该函数有如下的三种形式:

  • m.erase(k)
  • m.erase(p)
  • m.erase(b, e)

第一种方法删除的是m中键为k的元素,返回的是删除的元素的个数;第二种方法删除的是迭代器p指向的元素,返回的是void;第三种方法删除的是迭代器b和迭代器e范围内的元素,返回void。(借鉴了其他的文档)

map的大小:利用size函数。int n=mp.size()

数据的清空与判空:清空map中的数据可以用clear()函数,判定map中是否有数据可以用empty()函数,它返回true则说明是空map

3:set

sets作为一个容器也是用来存储同一数据类型的数据类型,并且能从一个数据集合中取出数据,并且在set中每个元素的值都唯一,而且系统能根据元素的值自动进行排序,按从小到大的顺序排列。

set的几个常用函数:begin()   返回set容器的第一个元素      end() 返回set容器的最后一个元素

clear()  删除set容器中的所有的元素      empty()  判断set容器是否为空     size() 返回当前set容器中的元素个数

count() 用来查找set中某个某个键值出现的次数 erase(iterator)  ,删除定位器iterator指向的值

find()  ,返回给定值值得定位器,如果没找到则返回end()。

insert(key); 将key插入到set中 ,返回值是pair<set<int>::iterator,bool>,bool标志着插入是否成功,而iterator代表插入的位置,若key已经在set中,则iterator表示的key在set中的位置。

4:数据结构的当中的一些,由于这几个已经学习过,就简单的列一下常用的函数

stack:

1.声明一个stack

   stack<int> s1;

   stack<string> s2;

2.stack中的操作

    stack<int> s;

    s.push(x)      无返回值,将元素x压栈

    s.pop();       退栈,无返回值

    s.top();        取栈顶元素,返回栈顶元素

    s.empty();     判断栈是否为空,如果是空,返回1,否则返回0

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

由于在栈中没有提供清空操作的函数,但是可以间接地实现清空栈,

   while(!s.empty())

   {    

          s.pop();

   }

queue:
1:声明一个queue
     queue<int>a;
     queue<string>b;
3:queue中的操作

back()返回最后一个元素

empty()如果队列空则返回真

front()返回第一个元素

pop()删除第一个元素

push()在末尾加入一个元素

size()返回队列中元素的个数

priority_queue的使用方法和这个差不多,基本上就是优先队列出队的情况按key值最大先出而已。





  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值