zoukankan      html  css  js  c++  java
  • 第十一章 顺序容器和关联容器的比较

      学完了顺序容器和关联容器之后呢,大概知道了顺序容器是容器内部的元素是按照顺序存储的,而关联容器是按照键值对来存储的。顺序容器可以通过下标的位置来访问相应的元素,而关联容器map是通过小标(键)来访问相应的值。最主要的是:其实这些容器都是模板类型的。

      当然我觉得最重要的差异还是关联容器当中的元素的数据类型:pair类型的数据,即pair<T1,T2>p1;make_pair(v1,v2);

    下面详细的来看一下顺序容器和关联容器在操作上的差异:

    1.首先不管是顺序容器还是关联容器都是要定义的,由于容器的类型不同,存在一些差异:(这里主要将常见的定义)

    顺序容器的定义:1. C<T>c ;  2.  C c(n,t) ;  3.C c(b,e) ; 4.C c(c2) ;

    关联容器的定义:1.map<k,v>m; 2.map<k,v>m(m2);3.map<k,v>m(b,e);  

    2.建立了容器之后,当然是要往里面添加元素的操作了

    在顺序容器中,添加元素的操作主要有:1.m.push_back()(这个操作适合所有的顺序容器)2.m.push_front()(适合于list和deque容器)3.m.insert(p,t)(p是迭代器)4.m.insert(p,n,t);5.insert(p,b,e);

    在关联容器中,添加元素的操作主要有:1.通过下标来添加,关联容器通过下标(即键)来访问和添加元素,当下标不在容器中就添加相应的键值对,如果存在,则返回键对应的值(只针对map容器)2.采用insert()操作:m.insert(e)(e是value_type类型的值),m.insert(beg,end) ,m.insert(iter,e),同样当容器中存在相应的元素时,insert则不作任何的操作,如果容器中没有相应的元素则插入相应的元素,返回插入元素相应的位置。

    3.容器的大小,迭代器的操作两种类型的容器基本上是相同的:基本上容器大小是:m.size(),迭代器:C<T>::iterator iter。

    4.有了元素之后,当然是想删除不必要的元素的操作:

    在顺序容器中:删除元素有:c.erase(p)(p是迭代器) ;c.erase(b,e) ; c.clear() ; c.pop_back()(删除容器最后一个元素); c.pop_front() (删除容器第一个元素,只适合于list和deque)

    在关联容器中,删除元素:e.erase(k)(k是键)返回size_type类型的值,表示删除元素的个数。e.erase(p)(p是迭代器);m.erase(b,e)

    5.接下来当然是遍历容器当中的所有元素的操作咯。

    在顺序容器中,由于元素时按照顺序存储的,所以可以通过迭代器和下标法两种方式来遍历容器中的所有元素:

    for(C<T>::iterator iter=c.begin();iter!=c.end();++iter)      for(C<T>::reverse_iterator iter=c.rbegin();iter!=c.rend();++iter)((迭代器法)for(c<T>::size_type ix=0;ix!=c.size();++ix)(下标法)

    在关联容器中,由于元素是按照键值对的方式存储的。所以它是通过迭代器的方式来遍历所有的元素:

    for(m<k,v>::iterator iter=m.begin();iter!=m.end();++iter)   for(m<k,v>::reverse_iterator iter=c.rbegin();iter!=c.rend();++iter)

    6.访问容器中某一特定的元素:

    在顺序容器中,访问特定的元素可以直接通过下标法即vec[n]来访问相应的元素。

    在关联容器中,访问特定的元素就是相当于查找某一个元素,则可以通过m.find()和m.count()两个函数来实现,首先通过find成员函数找到元素的位置,然后通过count函数统计元素出现的次数,一次来得到相应的元素。

    7.在multimap和multiset容器中查找相应的元素是通过m.lower_bound(k),m.upper_bound(k),m.equal_range(k)的方式来查找相应的元素的。

  • 相关阅读:
    Qt QApplication 类简介--Qt 类简介专题(四)
    回调函数
    C++类型转换总结
    Debug Error
    C++回调函数(callback)的使用
    Nokia5230连接电脑无线上网
    photoshop cs6\cs5找不到扫描仪的解决办法(Twain_32.8BA补丁下载)
    UML类图几种关系的总结
    实现单点登录
    poj 1151Atlantis线段树求矩形面积并解题报告
  • 原文地址:https://www.cnblogs.com/ljy2013/p/3308971.html
Copyright © 2011-2022 走看看