STL
FlowShell
这个作者很懒,什么都没留下…
展开
-
STL容器之Deque
它也是一个动态数组,当然也能随机访问。不过是双端队列,它在尾部或首部插入数据,删除数据很快,在中间插入数据也很费时。它有push_back,push_front,pop_back,pop_front.函数。 Deque和Vector有相似的接口,它是双端的,在首部或是尾部插入,删掉数据很快,为了提供这个能力,它的内存是由多个内存块组成,第一个块向一个方向,最后一个块是向相反的方向。 它对元素的转载 2015-02-10 15:45:49 · 446 阅读 · 0 评论 -
STL迭代器值迭代器绑定器:Insert Iterators
Insert iterators是这样一个迭代器:从赋一个新值转变为插入一个新值。通过使用Insert iterators,算法能插入而不是重写。所有的Insert iterators都是output iterator categor。它们只提供赋一个新的能力。 看Copy的实现: namespace std { template OutputIterator copy (InputIt转载 2015-02-10 15:53:39 · 662 阅读 · 0 评论 -
STL函数对象2
看下面的例子: class IntSequence { private: int value; public: IntSequence (int initialValue): value(initialValue) {} int operator() () {return value++;} }; list coll; generate_n (back_inserter(coll转载 2015-02-11 14:53:04 · 610 阅读 · 0 评论 -
STL函数对象之预定义函数对象和函数对象绑定器
STL为我们定义了一些常用的函数对象,如下表。 函数绑定器是函数对象,它能结合函数对象、于特定值或函数在一起使用。它们也是被定义在 . 看下面的例子: find_if (coll.begin(),coll.end(), bind2nd (greater(),42))。 这个例子bind2nd把greater()于42结合起来用来检查大于42的值。 下面是STL为我们定义的函数绑定器:转载 2015-02-11 14:57:35 · 1125 阅读 · 0 评论 -
Utilities之auto_ptr
一,auto_ptr类的作用: 1.获取资源 2.处理一些操作 3,释放资源 一个简单的例子: void f() { ClassA* ptr = new ClassA; //create an object explicitly try { ... //perform some operations }catch (...)转载 2015-02-10 15:42:25 · 500 阅读 · 0 评论 -
C++ STL简介
STL的代码从广义上讲分为三类:algorithm(算法)、container(容器)和iterator(迭代器),几乎所有的代码都采用了模板类和模版函数的方式,这相比于传统的由函数和类组成的库来说提供了更好的代码重用机会。在C++标准中,STL被组织为下面的13个头文件:、、、、、、、、、、、和。以下笔者就简单介绍一下STL各个部分的主要特点。 一、算法 大家都能取得的一个共识是函数库对数据转载 2015-02-10 15:39:13 · 591 阅读 · 0 评论 -
Utilities之pairs
类Pair是一个结构体,它是把两个元素作为一个单元。在STL中在很多地方会用到,特别是容器类:map,multimap会用Pair来管理数据,pair中的两个元素分别是key/value。它被定义在中。 namespace std { template struct pair { typedef T1 first_type; typedef T2 second_type转载 2015-02-10 15:41:36 · 539 阅读 · 0 评论 -
STL容器之Map,MulitMap
Map元素是一对组合Key/Value。Key的值不能重复,可以把Key作为下标得到Value的值。它也是按照一定的顺序排列。 MultiMap和Map差不多,只不过它支持重复的Key值。 所有的关联容器的排列顺序是可选择的,默认的是。 我们可以定义一个排序准则有两个方法: 1. 作为模板参数:std::set > coll; 2. 作为一个构造参数:在运行时传递转载 2015-02-10 15:48:29 · 1335 阅读 · 0 评论 -
STL函数对象之自定义函数对象
如何定义自己的函数对象,它使用于任何的绑定器 要定义自己的绑定器要满足一定的条件:必须提供参数和返回值的类型。 STL为我们提供了两个结构体: template struct unary_function { typedef Arg argument_type; typedef Result result_type; }; template struct binary_fun转载 2015-02-11 14:58:25 · 950 阅读 · 0 评论 -
STL容器之Set,MultiSet
Set,MultiSet都是关联容器,它们的元素是按照一定的顺序排列的并且排列是自动的。关联容器代表性的是用二叉树实现。每一个元素有一个父亲和两个孩子。并且父元素比它的左孩子 要大,比它的右孩子要小。 Set:所有元素不能是重复的。并且按照一定的顺序排列,默认是从小到大。 MultiSet:和Set差不多,只不多它支持重复的元素。 它们的元素自动排序,默认是。元素间的比较是很严格的:转载 2015-02-10 15:47:52 · 521 阅读 · 0 评论 -
STL迭代器之迭代器绑定器:Stream Iterator
一个 stream iterator 是这样一个迭代器:允许你用一个流作为算法的一个源或是目的。特别的,一个input迭代器能够从input stream中读入数据。.输出迭代器可以当作output stream来写数据。 Ostream Iterators: 通过使用 ostream iterators,算法可以直接向streams中写数据。一个ostream iterator的转载 2015-02-11 14:51:26 · 1103 阅读 · 0 评论 -
STL函数对象
函数是这样一个Object:它定义了operator()操作。例如: class FunctionObjectType { public: void operator() { statements } } 这样的定义有三个重要的优点: 1. 如果它又一个状态它会更加智能,事实上你可以在同一个函数中有两个实例,这两个实例可以用同一个恶有多个状态的函数对表示。 2.转载 2015-02-11 14:52:39 · 635 阅读 · 0 评论 -
STL容器之list
它是用链表实现的,所以不支持随机访问。但它在插入,删除效率很高。也有push_back,push_front,pop_back,pop_front.函数。 因为它是链表,一些泛型算法对它不太适用,于是它有自己的一些函数。它的函数清单如下: assign() 给list赋值 back() 返回最后一个元素 begin() 返回指向第一个元素的迭代器 clear() 删除所有元素转载 2015-02-10 15:46:29 · 536 阅读 · 0 评论 -
Unlities之numeric_limits
用numeric_limits可以为每一个类型提供一个接口。 A general template provides the default numeric values for any type: namespace std { /* general numeric limits as default for any type */ template class numeric_l转载 2015-02-10 15:43:11 · 971 阅读 · 0 评论 -
STL迭代器之迭代器的种类
所有的容器都有自己的迭代器,我用的时候不需要添加什么文件,但有三种迭代器一定要加 #include 头文件:流,插入,翻转。 有五种迭代器的种类: Iterator Category Ability Providers Input iterator Reads forward istream Output iterator Writes转载 2015-02-10 15:51:03 · 789 阅读 · 0 评论 -
STL迭代器之迭代器绑定器:Iterator Traits
Iterators有不同的类型,每种类型都代表着不同的能力,它在重载某个行为时,是有用的,甚至有必要。通过iterators tags和iterator traits 重载可以实现。对于么一个iterator类型STL都提供一个terator tag,这个terator tag能被做一个’table”. namespace std { struct output_iterator_ta转载 2015-02-11 14:52:07 · 933 阅读 · 0 评论 -
STL迭代器之迭代器适配器:Reverse Iterators
迭代器适配器: 这些特殊的迭代器允许算法在反转,插入,流中操作。 Reverse Iterators Reverse Iterators重新定义++,--操作符为了它们的行为像Reverse.因此如果你用Reverse Iterators 代替平常的迭代器,算法处理元素以相反的顺序,所有的容器都支持用Reverse Iterators的能力。 一个有趣的例子: vector col转载 2015-02-10 15:52:31 · 744 阅读 · 0 评论 -
STL容器之泛型容器
Abilities: 1.所有的容器都提供Value语义而不是Conference语义。当插入值要内部拷贝,因此容器内的元素一定要能拷贝。如果不能拷贝的话,你可以用指向元素的指针,或指针对象来使用容器。 2.一般来说,容器里的元素都有一个顺序,因为我们可以反复声明任何一个元素多次。并且支持函数返回迭代器,该迭代器作用于元素。 3.一般来说,操作是不安全,我们才使用时一定要满足操作的一些要求。转载 2015-02-10 15:49:04 · 1000 阅读 · 0 评论 -
STL迭代器之辅助迭代器函数
辅助迭代器函数: STL提供三个辅助函数:advance(),distance(), and iter_swap().那前两个函数给了所有迭代器一些能力,平常这些能力只有random access iterators拥有:向前移动多个位置和处理两个迭代器的差值。第三个函数允许你交换两个迭代器的值。 函数advance(): #include void advance (Input转载 2015-02-10 15:51:43 · 654 阅读 · 0 评论 -
容器介绍之Vector
STL提供两种不同的容器:顺序容器,关联容器。Vector是顺序容器的一种。 vector是以一个动态数组来管理数据,它能随机访问,在vector的尾部加入或是删除元素是非常的快的。但在中间或首部插入元素或删除元素是很耗时的。他只能向后插入元素,所以它只有push_back,pop_back函数。 以下转载自:http://www.cnblogs.com/ahuo/archive/2007转载 2015-02-10 15:44:52 · 838 阅读 · 0 评论