c++ STL 开发技术导引
文章平均质量分 82
本专栏主要整理记录了c++ STL容器技术,具体介绍了各种容器的原理和应用,并给出测试用例,包括vector、deque、list、set、map、queue、stack等。同时介绍了多种高效算法,包括非变易算法、变易算法等,对各算法给出了实现源码以及用法用例。
Hao_09
这个作者很懒,什么都没留下…
展开
-
stl变易算法(三)
本篇接着前面stl变易算法(一)和stl变易算法(二)继续讲述变易算法。这里将介绍完余下的变易算法,主要有:填充filln次填充fill_n、随机生成元素generate、随机生成n个元素generate_n、移除复制remove_copy、条件移除复制remove_copy_if、移除remove、条件移除remove_if、不连续重复元素复制unique_copy、剔除连续重复元素unique、原创 2015-07-15 15:39:47 · 1354 阅读 · 0 评论 -
stl变易算法(二)
本篇接着前篇stl变易算法(一)继续讲述变易算法。主要介绍transform、replace、replace_if、replace_copy以及replace_copy_if的用法及实现代码,并给出测试用例。元素变换transformtransform算法用于实行容器元素的变换操作。如下两个使用原型,一个将迭代器区间[first,last)中元素,执行一元函数对象op操作,变换后的结果存放在[res原创 2015-07-14 23:45:18 · 1312 阅读 · 0 评论 -
stl变易算法(一)
C++ STL的变易算法是一组能够修改容器元素数据的模板函数,可进行序列容器的复制、交换、替换、填充、移除、旋转等。这些算法对迭代器有较高的要求,具体的迭代器类型随各个算法而定,或向前迭代器、或双向迭代器、又或者是随机迭代器,以提供算法所需要的迭代器操作。应用变易算法时,先要检查容器的迭代器是否符合要求,防止产生编译错误。元素复制copyC++STL提供一个用于容器间元素拷贝的copy算法,将迭代区原创 2015-07-12 22:45:36 · 1558 阅读 · 0 评论 -
stl非变易算法(二)
这里接着上篇stl非变易算法(一)进行总结。主要解析算法函数count、count_if、mismatch、equal、search、search_n以及find_end,给出算法函数的实现及测试用例。下面直接进入正题。统计等于某值的容器元素个数countcount函数用于计算容器中某个给定值的出现次数。计算迭代区间[first,last)上等于val值的元素个数ret,返回计数。//count算法原创 2015-07-12 12:04:45 · 1321 阅读 · 0 评论 -
stl非变易算法(一)
C++ STL的非变易算法是一组不破坏操作数据的模板函数,用来对序列数据进行逐个处理、元素查找、子序列搜索、统计和匹配。非变易算法具有极为广泛的适用性,基本上可应用于各种容器。本文详细说明算法函数for_each、find、find_if、adjacent_find以及find_first_of的实现原理及用法并给出例子。原创 2015-07-11 23:45:52 · 1545 阅读 · 0 评论 -
stl之queue队列容器
queue队列也是一个线性存储表,元素的数据插入在表的一端进行,在另一端删除,从而构成先进先出表。插入一端为队尾,删除的一端为队首。 由于仅需取队首和队尾元素的操作,因此queue队列容器并不提供任何类型的迭代器对队列中其他位置处的元素进行访问操作。创建queue对象 queue() 默认构造函数,创建一个空的queue对象。 queue(const queue&)原创 2015-07-11 11:18:53 · 4489 阅读 · 0 评论 -
stl之stack容器
为了严格遵循堆栈数据后进先出原则,stack不提供元素的任何迭代操作,因此stack容器不会向外部提供可用的前向或反向迭代器类型。 头文件#include<stack>创建stack对象 stack() 默认的构造函数,创建一个空的stack对象。 stack<int> s; //使用默认的deque为底层容器,创建一个空的堆栈对象s。 stack(const stack原创 2015-07-11 10:39:44 · 1395 阅读 · 0 评论 -
stl之multimap容器
multimap与map一样,都是使用红黑树对记录型的元素数据按元素键值的比较关系,进行快速的插入、删除和检索操作,所不同的是multimap允许插入具有重复性键值的元素。在multimap容器中,元素的键值与元素的映照数据的映照关系是多对多的,即multimap是多重映照容器。由于元素键值允许重复,使得数组操作符“[]”利用键值来访问元素没有意义,故而multimap并没有定义数组方式的“[]原创 2015-07-11 09:48:03 · 1605 阅读 · 0 评论 -
stl之bit_vector原理及应用
原理 bit_vector容器具有vector容器一样的成员西数,常用于硬件端口的控制。区别于vector的一个重要特征是bit_vector更节省内存空间,一个元素只占用一个bit ,而不是一个字节。 bit_vector容器的每个元素是一个bit位值,取0或1,连续分配在以字为单位的字节块中,如图所示,13个bit分别为1011010100010,占用了一个字的内存空间。一个字为2个字节大小原创 2015-07-10 23:32:12 · 6268 阅读 · 0 评论 -
stl之map容器的原理及应用
容器的数据结构同样是采用红黑树进行管理,插入的元素健位不允许重复,所使用的节点元素的比较函数,只对元素的健值进行比较,元素的各项数据可通过健值检索出来。map容器是一种关联容器,实现了SortedAssociative Container、Sorted Associative Container和Unique Associative Container概念的接口规范。map技术原理图中所示原创 2015-07-05 12:21:47 · 15313 阅读 · 0 评论 -
stl之multiset容器的应用
与set集合容器一样,multiset多重集合容器也使用红黑树组织元素数据,只是multiset容器允许将重复的元素健值插入,而set容器则不允许。set容器所使用的C++标准头文件set,其实也是multiset容器的头文件,因为这个set头文件也包含multiset所需的红黑树和自身实现文件,只要用宏语句“#include”包含进来,就可对multiset容器的应用代码进行编译。创建m原创 2015-07-04 13:54:17 · 2290 阅读 · 0 评论 -
stl之set集合容器应用基础
set集合容器使用一种称为红黑树(Red-Black Tree) 的平衡二叉检索树的数据结构,来组织泛化的元素数据。每个节点包含一个取值红色或黑色的颜色域,以利于进行树的平衡处理。作为节点键值的元素的插入,必须确保每个子树根节点的键值大于左子树所有节点的键值,而小于右子树所有节点的键值。不会将重复的键值插入容器,也不需要指定具体的插入位置,而按元素在树中的关联关系,进行位置检索和插入,元素的删除亦原创 2015-07-03 19:49:41 · 3581 阅读 · 0 评论 -
stl之list双向链表容器应用基础
不同于采用线性表顺序存储结构的vector和deque容器,list双向链表中任一位置的元素差值、插入和删除,都具有高效的常数阶算法时间复杂度O(1)。头文件#include创建list对象1)list();//创建一个没有任何元素的list对象。listl 2)list(size_type n);//创建一个具有n个元素的list对象,每个元素采用它的类型下的默认值。li原创 2015-07-03 15:55:19 · 1494 阅读 · 0 评论 -
stl之deque双端队列容器
deque与vector非常相似,不仅可以在尾部插入和删除元素,还可以在头部插入和删除。不过当考虑到容器元素的内存分配策略和操作性能时,deque相对vector较为有优势。头文件#include创建deque对象1)deque();//创建一个没有任何元素的deque对象。deque d2)deque(size_typen);//创建一个具有n个元素的deque对象,每个原创 2015-07-03 09:53:43 · 5865 阅读 · 1 评论 -
stl之string类用法详细总结
标准c++中String类非常强大,合理使用,能极大提高编程效率,下面就对string类的用法进行总结。头文件#includeString类的构造函数如下:1) string s; //生成一个空字符串s2) string s(str) //拷贝构造函数生成str的复制品3) string s(str,index) //将字符串str内“始于位置index原创 2015-07-02 17:31:45 · 10236 阅读 · 2 评论 -
二维 三维 向量vector 定义,初始化
vector> Arrayleim::centernumber, vector((0,0)));原创 2014-04-24 14:42:54 · 22458 阅读 · 1 评论 -
Vector的用法
1 使用vector之前必须包含相应的头文件#include 2 vector对象的定义和初始化vector v1; vector保存类型为T的对象。默认构造函数v1为空。vector v2(v1);v2是v1的一个副本。vector v3(n,i);v3包含n个值为i的元素。vector v4(n);v4含有值初始化的元素的n个副本。3 vector对象的操作1. v.push原创 2014-03-13 21:58:28 · 1488 阅读 · 0 评论 -
stl之vector的应用
这里主要是对vector容器的一些常见应用的总结。至于vector的构造函数及初始化可以参考http://blog.csdn.net/lsh_2013/article/details/21191289,这里不再赘述。元素的遍历用迭代器访问vector元素#include #include using namespace std;int main(void){ vector v原创 2015-07-02 21:23:43 · 2680 阅读 · 0 评论