月度归档: 2015年10月

C++高级_Map/multimap容器_STL标准模板库

Map容器的简介 map是标准的关联式容器,一个map是一个兼职对序列,即(key,value)对。他提供基于key的快速检索能力 map中key值是唯一的,集合中得元素按一定的顺序排列,元素插入过程是按照排序规则插入,所以不能指定插入位置。 map的集体实现采用红黑树变体的 平衡二叉树 的数据结构,在插入操作和删除操作上比 vector 快。 mao可以直接存取key所对应的value,支持 [ ] 操作符,例如:map[key] = valie。 multimap与map的区别:map支持唯一键值,每个键只能出现一次。 而multimao中相同键可以出现多次。 multimap不支持 [ …

C++高级_pair对组的使用_STL标准模板库

pair对组的使用 pair译为对组,可以将两个值视为一个单元 将两个值使用为一个单元的情况,就可以使用pairs。在c++的标准模板库中,很多模板容器的实现都使用了pairs,例如:map、mutimap等键值对组合结构。 类模板:template <class T1, class T2> struct pair 参数:T1是第一个值的数据类型,T2是第二个值的数据类型。 功能:pair将一对值组合成一个值,这一对值可以具有不同的数据类型(T1和T2),两个值可以分别用pair的两个公有函数first和second访问。 pair.first 是pair里面的第一个值,是T1类型…

C++高级_Set/multiset容器_STL标准模板库

set是一个集合容器u其中所包含的元素是唯一的u集合中的元素按一定的 顺序排列。元素插入过程是按排序规则插入,所以不能指定插入位置。 set采用“黑树变体的数据…构实现,“黑树属于平衡二叉树。在插入操作 和删除操作上比vector快。 set不可以直接存取元素(不可以使用 at.(pos) 与 [ ] 操作符)。 multiset与set的区别:set支持唯一键值,每个元素值只能出现一次; 而multiset中同一只可以出现多次。 不可以直接修改set 或 multiset容器中得元素值,因为该类容器是自动排序的。如果希望修改一个元素值,必须先删除原来的元素,再插入先的元素。 使用…

C++高级_List容器_STL标准模板库

List容器详解 list是C++标准模版库(STL,Standard Template Library)中的部分内容。实际上,list容器就是一个双向链表,可以高效地进行插入删除元素。 list不可以随机存取元素,所有不支持 at.(pos) 函数和 [ ] 操作符,因此对于迭代器,只能通过“++”或“–”操作将迭代器移动到后继/前驱节点元素处。而不能对迭代器进行+n或-n的操作 如果你需要大量的插入和删除,而不关心随即存取,应该使用list容器 使用list容器之前必须加上<vector>头文件:#include <list>; list属于std命名域…

C++高级_Queue容器_STL标准模板库

Queue容器的简介 queue是队列容器,是一个“先进先出”的容器。 queue是简单的装饰deque容器而成为另外的一种容器。 需要添加头文件:#include <queue> queue 与stack 模板类很相似,queue 模板类也需要两个模板参数,一个是元素类型,一个容器类 型,元素类型是必要的,容器类型是可选的,默认为deque 类型。 queue队列也是一个线性存储表,与后进先出的堆栈不同,元素数据在表的一端插入,在另一端进行删除,即构成了先进先出FIFO表。插入的一端成为队尾,删除的一端成为队首。 C++ STL对queue队列的泛化,是通过模板类型,将默认的de…

C++高级_Stack容器_STL标准模板库

Stack容器是什么? stack是堆栈容器,是一种“先进后出”的容器。 stack是简单地装饰deque容器而成为另外的一种容器。 使用的时候需要添加头文件: #include <stack> Stack(堆栈) 是一个容器类的改编,为程序员提供了堆栈的全部功能,— 也就是说实现了一个先进后出(FILO)的数据结构 Stack的默认构造:

stack的拷贝构造和赋值:

stack的push() 与 pop() 方法: [crayon-6075975a…

C++高级_Deque容器_STL标准模板库

Deque容器 deque是“double-ended queue”的缩写,和vector一样都是STL的容器,deque是双端数组,二vector是单端的。 deque在接口上合vector非常相似,在许多操作的地方可以直接替换。 deque可以随机存取元素(支持索引值直接存取,用[]操作符或 at() 方法) deque头部和尾部添加或者移除元素都非常快速,但是在中部安插元素或移除元素都比较耗时。 使用时需要添加头文件:#include <deque> deque容器的构造函数:

deque的赋值: [crayo…

C++高级_ 迭代器(iterator)的基本原理和使用方法

除了使用下标来访问vector对象的元素外,标准库还提供了另一种检测元素的方法:使用迭代器(iterator)迭代器就如同一个指针。迭代器就是指针的泛指,可以指向元素。事实上,C++的指针也是一种迭代器。但是,迭代器不仅仅是指针,因此你不能认为他们一定具有地址值。例如,一个数组索引,也可以认为是一种迭代器。 迭代器是一个“可遍历STL容器内全部或部分元素”的对象。  迭代器指出容器中的一个特定位置。  迭代器就如同一个指针。  迭代器提供对一个容器中的对象的访问方法,并且可以定义了容器中对象 的范围。  迭代器的类别:    正向迭代器:组合输入迭代器和输出迭代器的功能,还可以多次…

C++高级_Vector容器 _STL标准模板库

Vector是将元素置于一个 动态数组 中 加以管理的容器。 Vector可以随机存取元素(支持索引值直接存取就像数组一样方便,使用 [] 操作符或者 at()方法)。是一种随机访问的数组类型,它提供了对数组元素的快速访问、随机访问,以及在序列尾部快速、随机地插入和删除操作。它类似于数据结构中的队列、数组和堆栈等概念。 Vector是一个类模板,而不是一种数据类型,使用时需要添加头文件:#include<vector> vector尾部添加或移除元素非常快速。但是在中部或头部插入元素或移除 元素比较费时。 vector类为内置数组提供了一种替代表示,与string类一样 vecto…

C++高级,关于STL标准模板库

1.关于什么事STL就不在这里累述了,不了解的可以去百度一下 整个软件领域里,数十年来确实都在为了一个目标而奋斗—可复用性 从最早的面向过程的函数库,到面向对象的程序设计思想,到各种组件 技术(如:COM、EJB),到设计模式(design  pattern)等等。而STL也在 做着类似的事情,同时在它背后蕴涵着一种新的程序设计思想–泛型化设计 (generic  programming)。 STL的基本概念 STL的代码可以在广义上分为三类: container(容器) iterator(迭代器) algorithm(算法) 容器即是数据结构中的结构,如队列,栈等;   容器和算…