
STL
文章平均质量分 72
爱橙子的OK绷
时刻准备着。。。
展开
-
vector动态创建数组
相应的头文件: #include <vector>vector定义向量对象:vector<int> ivec; //定义向量对象 ivecvector<int> ivec1(ivec); // 定义向量对象ivec1,并用ivec初始化vector<int> ivec2(n,1); //定义向量ivec2,包含了n个值为1的元素vector<int原创 2015-05-12 10:42:03 · 5356 阅读 · 0 评论 -
《STL源码剖析》学习笔记-第5章 关联式容器(二)
1、set和multisetset的特性: (1)所有元素都会根据元素的键值自动被排序。 (2)set是集合,它的元素的键值就是实值,实值就是键值,不允许两个元素有相同的值。 (3)不可以通过set的iterator来改变元素的值,因为set的元素值就是键值,改变键值会违反元素排列的规则。 (4)在客户端对set进行插入或删除操作后,之前的迭代器依然有效。当然,被删除的元素的迭代器是个例外。原创 2016-05-08 13:10:46 · 833 阅读 · 0 评论 -
《STL源码剖析》学习笔记-第5章 关联式容器
1、关联式容器概述所谓关联式容器,观念上类似于关联式数据库:每笔数据都有一个键值(key)和一个实际值(value)。当元素被插入容器时,内部机制根据键值,按着一定的规则将元素置于特定的位置。关联式容器没有所谓头尾的概念(只有最大元素,最小元素),所以不会有类似push_back(),push_front(),pop_back(),pop_front,begin(),end()这样的操作。标准的st原创 2016-05-07 18:33:47 · 790 阅读 · 0 评论 -
《STL源码剖析》学习笔记-第4章 序列式容器(二)
1、stackstack是一种先进后出的数据结构,只有一个出口。允许新增元素、移除元素、取得最顶端元素。不允许有遍历行为。在SGI STL的源码<stl_stack.h>的设计中,它是基于某种容器作为底部结构的,默认容器是deque容器,用户也可以自己指定容器的类型。stack不提供走访功能,也不提供迭代器。stack源码如下:template <class T, class Sequence =原创 2016-05-07 12:10:38 · 966 阅读 · 0 评论 -
《STL源码剖析》学习笔记-第4章 序列式容器
1、vector1、vector特性(1)vector有自动扩容操作,每次扩容伴随着“配置新空间 / 移动旧数据 / 释放旧空间”的操作,因此有一定时间成本。 (2)vector提供了reserve接口,如果能够对元素个数有大概了解,可以一开始就分配合适的空间。 (3)vector的内存空间是连续的,对插入元素的操作而言,在vector尾部插入才是合适的选择。维护的是一个连续线性空间,所以vec原创 2016-05-06 20:23:38 · 752 阅读 · 0 评论 -
《STL源码剖析》学习笔记-第3章 迭代器
1、迭代器设计思维-STL关键所在迭代器:就是提供一种方法,在不需要暴露某个容器的内部表现形式情况下,使之能依次访问该容器中的各个元素。STL的中心思想在于:将数据容器(containers)和算法(algorithms)分开,彼此独立设计,最后再以一帖粘合剂将它们撮合在一起。只要对算法给予不同的迭代器,就可以对不同容器进行相同的操作。以算法find( )为例,它接受2个迭代器和1个”搜寻目标”:/原创 2016-05-05 11:56:07 · 578 阅读 · 0 评论 -
《STL源码剖析》学习笔记-第2章 空间配置器
1、SGI 特殊的空间配置器,std::allocSGI STL 的配置器与众不同,也与标准规范不同,其名称是 alloc 而非 allocator ,而且不接受任何参数。我们所习惯的c++内存配置操作和释放操作如下:class Foo { ... };Foo* pf = new Foo; // 配置内存,然后构造对象delete pf; // 将对象析构,然后释放内存这其中的new 操作符(n原创 2016-05-04 17:38:49 · 1402 阅读 · 0 评论 -
map和set的异同
异同分析MAP的节点是一对数据. SET的节点是一个数据.map使用关键值Key来唯一标识每一个成员, map的value值可以重复。 set存储已排序的无重复的元素。都属于关联容器 ,形式不同:map的形式 map<type1, type2> mymap; set的形式 set<type> myset; set(集合)——包含了经过排序了的数据,这些数据的值(v转载 2016-03-12 15:33:34 · 7942 阅读 · 1 评论 -
STL中sort排序算法原理
1、所有sort算法介绍所有的sort算法的参数都需要输入一个范围,[begin,end)。这里使用的迭代器(iterator)都需是随机迭代器(RadomAccessIterator), 也就是说可以随机访问的迭代器,如:it+n什么的。(partition 和stable_partition 除外)如果需要自己定义比较函数,可以把定义好的仿函数(functor)作为参数传入。每种算法都支持传入比转载 2016-03-11 22:56:21 · 3342 阅读 · 0 评论 -
STL---哈希map:unordered_map
一、unordered_map 哈希map是一种关联容器,通过键值和映射值存储元素。允许根据键值快速检索各个元素。 在unordered_map中,键值一般用来唯一标识元素,而对应的值是一个对象关联到这个键的内容。键映射值的类型可能会有所不同。 在内部unordered_map的元素不以键值或映射的元素作任何特定的顺序排序,其存储位置取决于哈希值,允许直接通过其键值为快速访问单个元素(具有恒定平转载 2015-12-22 10:44:08 · 709 阅读 · 0 评论 -
STL---map用法详解
一.Map概述 Map是STL的一个关联容器,它提供一对一(其中第一个可以称为关键字,每个关键字只能在map中出现一次,第二个可能称为该关键字的值)的数据处理能力。这里说下map内部数据的组织,map内部自建一颗红黑树(一种非严格意义上的平衡二叉树),这颗树具有对数据自动排序!!!的功能,所以在map内部所有的数据都是有序的!!!,后边我们会见识到有序的好处。下面举例说明什么是一对一的数据映射。比如转载 2015-11-03 21:04:40 · 501 阅读 · 0 评论 -
STL容器类型
容器所谓STL容器,即是将最常运用的一些数据结构(data structures)实现出来。容器是指容纳特定类型对象的集合。根据数据在容器中排列的特性,容器可概分为序列式(sequence)和关联式(associative)两种。迭代器是一种检查容器内元素并遍历元素的数据类型。它提供类似指针的功能,对容器的内容进行走访。#include<iterator>例如:std::vector<int>转载 2015-10-08 18:01:25 · 1133 阅读 · 0 评论 -
标准模板库(STL)使用---pair
一、概述pair是一种模板类型,定义在头文件utility中。(使用#include < vector >也可以包含)pair包含两个数据成员,两个数据的类型可以不同,基本的定义如下:pair<int, string> p;表示p中有两个类型,第一个元素是int型的,第二个元素是string类型的,如果创建pair的时候没有对其进行初始化,则调用默认构造函数对其初始化。pair<string, st原创 2015-09-10 12:18:33 · 666 阅读 · 0 评论 -
标准模板库(STL)使用---vector
或许你已经把 C++ 作为主要的编程语言用来解决 TopCoder 上的问题。这意味着你已经简单使用过了 STL,因为数组和字符串都是作为 STL 对象传递给函数。也许你已经注意到了,很多程序员写代码比你快得多,也更简洁。或许你还不是但想成为一名 C++ 程序猿,因为这种编程语言功能很强大还有丰富的库(也许是因为在 TopCoder 的练习室里和竞赛中看到了很多非常精简的解决方案)。无论过去如何,这转载 2015-09-10 10:02:50 · 689 阅读 · 0 评论 -
《STL源码剖析》学习笔记-第6章(一) set相关算法
STL中定义的set要求元素不得重复且已经排序。而set算法要求的都是有序区间(输出也是有序的),但元素可以重复出现。STL提供了4个set相关的算法,分别是并集(union)、交集(intersection)、差集(difference)和对称差集(symmetric difference),这4个算法接受的set必须是有序区间,都至少接受4个参数,分别表示两个set区间。一般而言,set算法前4原创 2016-05-08 23:11:23 · 890 阅读 · 0 评论