STL
文章平均质量分 86
CouchDB
专注于系统级应用的开发,研究方向:runtime system, compiler techniques, programming language, computer architecture等
展开
-
STL 堆排序
C++ STL中提供了不少和排序相关的算法,包括堆排序(heap_sort)、排序(sort)、稳定排序(stable_sort)、局部排序(partial_sort),时间复杂度均为O(nlogn)。其中,对于堆排序,也提供了不少函数,像入堆push_heap、创建堆make_heap、出堆pop_heap,是否为堆is_heap等。首先要明确数据结构上堆的概念。对于一个迭代器区间上的元素,不管原创 2015-08-22 00:57:43 · 7046 阅读 · 4 评论 -
STL Mutating Algorithms小结
与Non-mutating Algorithms相比,变易算法能修改容器元素数据,可进行序列数据的复制、交换、替换、填充、移除、旋转、随机抖动、分割。还是参考叶至军的那本书以及网站Cplusplus.comcopy 元素复制。该函数用于容器间元素拷贝,将迭代器区间[first, last)的元素复制到由复制目标迭代器result给定的区间[result, result +原创 2015-08-21 17:56:54 · 1036 阅读 · 0 评论 -
priority_queue优先队列容器
优先队列也是队列的一种,与一般队列的不同在于,队列中最大的元素总是位于队首的位置,每次元素的出队都是当前队列中最大的元素,底层的具体实现细节用到了堆(heap)。C++ STL中优先队列的泛化,底层默认采用vector向量容器,大概是考虑到队列容器的元素可以用做数组操作,就可以应用堆算法找出当前队列的最大元素,并将其调整到队首位置,确保最大元素优先出队。提供了获取队首的top函数,不提供获取队原创 2015-08-19 21:25:41 · 1343 阅读 · 0 评论 -
stack堆栈容器
堆栈是一种线性表,插入和删除操作只在表的一端进行,该端成为栈顶,另一端则称为栈底。元素的入栈和出栈都是在栈顶进行的,因此堆栈是一种先进先出表。C++ STL的堆栈泛化是通过现有的序列容器来实现的,默认使用的是双端队列deque的数据结构。在STL中,stack的元素出栈操作是不返回栈顶元素的,获得栈顶元素需要调用相应的取栈顶函数才能获得,这种分离的实现,是考虑到出栈函数若是直接返回栈顶元素,将会导原创 2015-08-19 19:20:03 · 1354 阅读 · 0 评论 -
string基本字符序列容器
C语言每天提供专门的字符串类型,需要通过字符数组才能对字符串进行存储和处理。在标准C++中,字符串类由C++ STL实现。string是一个基于字符的序列容器,具有vector向量一样的内部线性结构,字符逐一写入容器,最后以null字符结尾。跟传统的char*字符数组相比,string提供了丰富的函数用于字符的添加、删除、替换、查找和比较等。 创建string对象主要有以下几种方式。原创 2015-08-19 12:12:09 · 963 阅读 · 0 评论 -
queue队列容器
queue队列也是一种线性存储表,元素的插入在表的一端进行,在表的另一端删除,具有先进先出的特点,插入的一端称为队尾,删除的一端称为队首。C++ STL的队列泛化,默认使用双端队列容器deque作为底层架构。元素的出队不返回队首元素,需要调用取队首函数来获取队首元素。队列是一种常用的数据结构,通常以消息队列的形式应用于进程间通信。创建queue对象有以下两种方式。(1) qu原创 2015-08-19 19:54:59 · 1108 阅读 · 0 评论 -
hash_set和hash_map
1.hash_set集合容器hash_set利用链式哈希表,进行数据的插入、删除和搜索。与set容器相同,不允许插入重复键值的元素。SGIC++哈希表是一个链式的结构,由表头和一系列单链组成。表头是一个数组式的线性表,用vector向量泛化出来。每个表头节点,称为桶(bucket),是一个指针域,指向链入的元素数据。表头的长度为向量容器的元素个数。哈希表中数据的遍历,迭代器从0号桶、1号桶原创 2015-08-19 10:36:21 · 2300 阅读 · 1 评论 -
map和multimap映射容器
map容器map所处理的数据与数据库表具有键值的记录很相似,在键值与映射数据之间,建立一个数学上的映射关系。map容器的数据结构仍然采用红黑树进行管理,插入的元素键值不允许重复,所使用的结点元素的比较函数只对元素的键值进行比较,元素的各项数据可以通过键值检索出来。对于键值和映射数据,可以通过pair封装成一个结构对象,map要做的就是将这个pair对象插入到红黑树中,同时也需要提供一个仅使用键原创 2015-08-18 14:23:15 · 5632 阅读 · 4 评论 -
set集合容器
set集合容器是使用红黑树[一种二叉检索树的数据结构]来组织泛化的元素数据。元素数据的检索使用的是二叉检索树的中序遍历算法,检索的效率高于vector、deque、和list等容器,由于采用中序遍历算法可以将二叉检索树中的键值由小到大遍历出来,所以set集合容器蕴含了元素间的有序性。红黑树的每个节点包含一个取值为红色或者黑色的颜色域,节点键值的插入必须确保树根节点的键值大于左子树所有节点的键值,而小原创 2015-08-14 12:55:13 · 981 阅读 · 0 评论 -
multiset多重集合容器
跟set集合容器相比,multiset多重集合容器也使用红黑树组织元素,只是multiset多重集合容器允许将重复的元素键值插入。元素的搜索依然具有对数级的算法时间复杂度,find和equal_range函数可以搜索出某一键值下的所有元素位置。创建multiset对象有以下几种方式。(1) multiset()multiset ms;(2) multiset(c原创 2015-08-14 14:16:18 · 1143 阅读 · 0 评论 -
deque双端队列容器
C++中的STL还是比较有用的,尤其是在做科研实现算法的时候,之前也有用过,但是没怎么系统地学过,因此最近找了本书,大致浏览了一下,叶志军的那本《C++ STL开发技术导引》,科普、入门性质的一本书,写得比较浅[呵呵,勿喷]。下面的内容大部分是摘自该书。 deque双端队列容器(double-ended queue),可以在尾部、头部插入、删除元素,采用分块的线性结构来存储数据,两个迭代器分别指向原创 2015-08-13 13:54:50 · 1169 阅读 · 0 评论 -
list双向链表容器
ist是双向链表的泛化容器,提供了splice和merge归并函数,sort函数利用list的数据结构特点对元素进行了归并排序。创建list对象创建list对象的方式主要有以下几种。 (1) list()list<int> l;(2) list(size_type n)list<int> l(10);(3) list(size_type n,const T&value)list<int> l(10原创 2015-08-13 16:56:15 · 774 阅读 · 0 评论 -
vector向量容器
vector容器是数组的一个泛化推广,不仅可以像数组那样进行元素的随机访问,还可以在容器的尾端插入新元素,实现了Random Access Container和Back Insertion Sequence概念。vector具有自动的内存管理功能,对于元素的插入和删除,能够动态调整占用的内存空间。创建vector对象有多种方式 (1) vector(constA&a=A()) 创建一个空的vec原创 2015-08-12 10:38:24 · 761 阅读 · 0 评论 -
STL Non-mutating Algorithms小结
C++ STL中有许多非变易算法,这些算法不破坏操作数据,用来对序列数据进行逐个处理(for_each)、元素查找(find)、子序列搜索(find_first_of)、统计和匹配(count和mismatch)等。非变易算法在实现各种大型复杂一点的算法的时候比较方便,而且比较稳定,这也是STL本身固有的特点。主要列出以下几种,参考了叶志军的那本《C++ STL开发技术导引》,同时也结合网站C原创 2015-08-21 11:29:15 · 1159 阅读 · 0 评论