C++(STL)
文章平均质量分 81
langb2014
这个作者很懒,什么都没留下…
展开
-
使用gcc和cmake编译工具编辑opencv例子
1、第一步,建DisplayImage.cpp:#include #include using namespace cv;int main(int argc, char** argv ){if ( argc != 2 ){printf("usage: DisplayImage.out \n");return -1;}Mat image;image = imread("te原创 2016-01-24 19:38:31 · 2096 阅读 · 0 评论 -
STL源码剖析 [容器](十二)[RB_Tree]
关于红黑树的介绍网上也比较多比较详细,这里不啰嗦了。学习可以参考维基百科的“红黑树”。源码://file RBTree.h//written by saturnman#ifndef _RB_TREE_H_#define _RB_TREE_H_#include#include#include#includeusing namespace std;templ原创 2015-08-30 17:07:45 · 713 阅读 · 0 评论 -
STL源码剖析 [容器](十六)[stl_map.h]
map是STL的一个容器,map也是一种关联式容器。它提供一对一(其中第一个可以称为关键字,每个关键字只能在map中出现一次,第二个可能称为该关键字的值)的数据处理能力,有助于我们处理一对一数据。这里说下map内部数据的组织,map内部是自建一颗红黑树(一种非严格意义上的平衡二叉树),这颗树具有对数据自动排序的功能,所以在map内部所有的数据都是有序的。源码:// Filename:原创 2015-08-31 11:57:40 · 818 阅读 · 0 评论 -
STL源码剖析 [容器](十三)[stl_tree.h]
G++ 2.91.57,cygnus\cygwin-b20\include\g++\stl_tree.h 完整列表/* * * Copyright (c) 1996,1997 * Silicon Graphics Computer Systems, Inc. * * Permission to use, copy, modify, distribute and sell this so原创 2015-08-31 09:35:12 · 835 阅读 · 0 评论 -
STL源码剖析 [特殊的空间配置器](内存配置stl_alloc.h)
这一部分的学习将按照《STL源码剖析》来记录。我下载的STL源码是http://www.sgi.com/tech/stl/download.html。source code中包括STL标准头文件(无扩展名)、C++Standard HP STL头文件(如vector.h,deque.h.....)、SGI STL内部文件(stl_开头的文件)。本文从书中第二章开始学习-----------原创 2015-08-26 12:39:07 · 1288 阅读 · 0 评论 -
STL源码剖析 [容器](七)[stl_heap.h]
make_heap()、push_heap()、pop_heap()、sort_heap()是主要函数。建立堆【make_heap(_First, _Last, _Comp)】:默认是建立最大堆的。对int类型,可以在第三个参数传入greater()得到最小堆。 添加数据【push_heap (_First, _Last)】:要先在容器中加入数据,再调用push_heap () 删除数原创 2015-08-30 14:30:01 · 692 阅读 · 0 评论 -
STL源码剖析 [容器](八)[priority_queue]
priority_queue,首先它是一个queue,即只允许在低端加入元素,并从顶端取出元素,除此之外别无其他存取元素的途径(故priority_queue不提供遍历功能,也不提供迭代器);再次它具有priority,即queue中的元素具有一定的priority:其内的元素自动依照元素的权值排列,权值最高者(也就是数值最高),排在最前面。注:在queue并非是依照严格的权值递减的顺序排列,而是原创 2015-08-30 15:12:35 · 632 阅读 · 0 评论 -
STL源码剖析 [容器](五)[stl_stack.h]
stack比较简单,不需要太多的说明,直接看一下详细的源码说明:// Filename: stl_stack.h// Comment By: 凝霜// E-mail: mdl2009@vip.qq.com// Blog: http://blog.csdn.net/mdl13412////////////////////////////////////原创 2015-08-30 11:54:24 · 554 阅读 · 0 评论 -
STL源码剖析 [容器](四)[stl_pair.h]
Pair模版是C++ STL中短小精干的结构体,被定义在头文件中,把两个值视为一个结构单元,如map和multimap都利用了很多pair对组模版,即为成对元素,另外函数需要返回两个值的时候,也常用pair模版(当然,结构体也一样方便)。注意:pair被定义为结构体而不是类,这样一来他的成员都是公有属性,可以直接访问和赋值。Pair的定义:std::pair p(3,“原创 2015-08-29 13:48:18 · 749 阅读 · 0 评论 -
STL源码剖析 [容器](一)[stl_vector.h]
第三章讲的是迭代器,迭代器是将数据和算法很好的连接起来,接下来就学学存放数据的容器。STL的容器可以分为以下几个大类:一:序列容器, 有vector, list, deque, string.二 :关联容器, 有set, multiset, map, mulmap,hash_set,hash_map, hash_multiset, hash_multimap三:其他原创 2015-08-26 14:28:00 · 640 阅读 · 0 评论 -
STL源码剖析 [容器](十)[Binary search tree]
本文的译文来自:http://www.cnblogs.com/dskit/archive/2012/08/18/2645927.html本文原文来自维基百科:https://en.wikipedia.org/wiki/Binary_search_tree***************************************************************原创 2015-08-30 16:36:03 · 1062 阅读 · 0 评论 -
STL学习----入门(2)[模板介绍]
模板就是实现代码重用机制的一种工具,它可以实现类型参数化,即把类型定义为参数, 从而实现了真正的代码可重用性。模版可以分为两类,一个是函数模版,另外一个是类模版。一、函数模板它的一般形式如下:Template 返回类型 函数名(形参表){//函数定义体 }说明: template是一个声明模板的关键字,表示声明一个模板关键字class不能省略,如果类型形参多余一个原创 2015-08-25 12:12:25 · 426 阅读 · 0 评论 -
STL源码剖析 [容器](十五)[stl_multiset.h]
Set、multiset都是集合类,差别在与set中不允许有重复元素,multiset中允许有重复元素。// Filename: stl_multiset.h// Comment By: 凝霜// E-mail: mdl2009@vip.qq.com// Blog: http://blog.csdn.net/mdl13412/* *原创 2015-08-31 11:51:29 · 852 阅读 · 0 评论 -
STL源码剖析 [容器](十七)[stl_multimap.h]
multimap 与 map 一样,都是使用红黑树对记录型的元素数据,按元素键值的比较关系,进行快速的插入、删除和检索操作,所不同的是 multimap 允许将具有重复键值的元素插入容器。在 multimap 容器中,元素的键值与元素的映照数据的映照关系,是多对多的,因此,multimap 称为多重映照容器。multimap 与 map 之间的多重特性差异,类似于 multiset 与 set原创 2015-08-31 12:04:43 · 844 阅读 · 0 评论 -
STL源码剖析 [容器](十九)[stl_hash_fun.h]
hash表的实现是采用拉链法,其中用到了哈希函数,哈希函数的作用是把元素键值映射到对应的桶子里面,一般哈希值是键值对桶子数取余。源码:#ifndef __SGI_STL_HASH_FUN_H#define __SGI_STL_HASH_FUN_H#include __STL_BEGIN_NAMESPACE//hash function 是计算元素位置的函数//这些函原创 2015-09-08 18:46:58 · 781 阅读 · 0 评论 -
C++中#if #ifdef及其#define整理
C++中#if #ifdef 的作用 (http://www.cnblogs.com/renyuan/archive/2013/05/22/3092362.html) 一般情况下,源程序中所有的行都参加编译。但是有时希望对其中一部分内容只在满足一定条件才进行编译,也就是对一部分内容指定编译的条件,这就是“条件编译”。有时,希望当满足某条件时对一组语句进行编译,而当转载 2015-08-25 12:50:35 · 7692 阅读 · 0 评论 -
STL源码剖析 [容器](二十一)[stl_hash_map.h]
hash_map基于hash table(哈希表)。 哈希表最大的优点,就是把数据的存储和查找消耗的时间大大降低,几乎可以看成是常数时间;而代价仅仅是消耗比较多的内存。然而在当前可利用内存越来越多的 情况下,用空间换时间的做法是值得的。另外,编码比较容易也是它的特点之一。其基本原理是:使用一个下标范围比较大的数组来存储元素。可以设计一个函数(哈希函数,也叫做散列函数),使得每个元素的关原创 2015-09-14 09:33:52 · 1193 阅读 · 0 评论 -
STL源码剖析 [容器](十八)[stl_hashtable.h]
hashtable就像用一个array来作为容器,把要存储的数据value编码成数字i,然后把value保存到array[i]的位置,以后要搜索该value,就直接取它的编码对应的索引值就行了。hashtable.h源码:#ifndef __SGI_STL_INTERNAL_HASHTABLE_H#define __SGI_STL_INTERNAL_HASHTABLE_H// Has原创 2015-09-08 18:40:44 · 969 阅读 · 0 评论 -
STL源码剖析 [简单应用总结二]
容器://see http://www.cplusplus.com/reference/stl/// 演示STL容器#include #include #include #include #include #include #include #include #include #include #include #include #include //用于排序的原创 2015-09-14 10:53:52 · 803 阅读 · 0 评论 -
STL源码剖析 [简单应用总结一]
组件:// 演示STL基本组件//construct//destroy//uninitialized_copy/uninitialized_copy_n//uninitialized_fill/uninitialized_fill_n//get_temporary_buffer/return_temporary_buffer#include #include #include原创 2015-09-14 10:42:43 · 1271 阅读 · 0 评论 -
STL源码剖析 [算法](三)[stl_function.h]
/*stl_function.h @功能,functor相关测试效果。函数对象函数适配器环境,win7-vs2013*//* NOTE: This is an internal header file, included by other STL headers. * You should not attempt to use it directly. */#ifndef原创 2015-09-14 10:27:11 · 1491 阅读 · 0 评论 -
STL源码剖析 [算法](二)[stl_algo.h]
前面在stl_algobase.h介绍了基本的几个算法了,接下来看一下一些经常用到的有价值的几十种算法,这些算法需要使用才能够熟练掌握,我这里就把源码直接盗过来了。stl_algo.h源码:// Filename: // Comment By: 凝霜// E-mail: mdl2009@vip.qq.com// Blog: http://blog.c原创 2015-09-14 10:04:14 · 900 阅读 · 0 评论 -
STL源码剖析 [算法](一)[stl_numeric.h]==>copy
//唯一对外接口/*--------------------------------------------------------------------------------------* copy 函数及其重载形式*///完全泛化版本。 template // ? 这里的 InputIterator 和 OutputIterator 都只是名称而已,哪里确保了它们真的至少是 In原创 2015-09-14 09:54:36 · 773 阅读 · 0 评论 -
STL源码剖析 [算法](一)[stl_numeric.h]
stl_numeric.h里面的都是数值算法,与数值计算有关。stl_numeric.h源码:#ifndef __SGI_STL_INTERNAL_NUMERIC_H#define __SGI_STL_INTERNAL_NUMERIC_H__STL_BEGIN_NAMESPACE/* sum (1) :The default operation is to add the原创 2015-09-14 09:46:11 · 965 阅读 · 0 评论 -
STL源码剖析 [容器](二十二)[stl_hash_multimap.h和stl_hash_multiset.h]
hash_multimap和hash_multiset与前面的multimap和multiset特性没什么差别,差别就是底层机制是hashtable。这里就不详细说明了。stl_hash_multimap.h源码:// Forward declaration of equality operator; needed for friend declaration.//hash_m原创 2015-09-14 09:50:41 · 725 阅读 · 0 评论 -
STL源码剖析 [容器](二十)[stl_hash_set.h]
hash_set的底层数据结构是哈希表,因此要深入了解hash_set,必须先分析哈希表。哈希表是根据关键码值(Key-Value)而直接进行访问的数据结构,它用哈希函数处理数据得到关键码值,关键码值对应表中一个特定位置再由应该位置来访问记录,这样可以在时间复杂性度为O(1)内访问到数据。但是很有可能出现多个数据经哈希函数处理后得到同一个关键码——这就产生了冲突,解决冲突的方法也原创 2015-09-14 09:21:21 · 871 阅读 · 0 评论 -
STL源码剖析 [容器](九)[stl_slist.h ]
slist(single linked list)单链表实现了链表的基本功能,slist单链表(带头结点)完成了从头部插入,查找和删除数据等链表的基本操作。源码:// Filename: stl_slist.h// Comment By: 凝霜// E-mail: mdl2009@vip.qq.com// Blog: http://blog.原创 2015-08-30 15:31:58 · 693 阅读 · 0 评论 -
STL源码剖析 [容器](三)[stl_list.h]
这篇介绍的是list容器,学习list首选需要预备知识就是排序算法sort:http://blog.csdn.net/chenhanzhun/article/details/39337331这篇文章解释的非常清晰。===================================================================然后继续我们的stl_list.h源码:原创 2015-08-29 13:37:40 · 574 阅读 · 0 评论 -
STL源码剖析 [容器](五)[stl_deque.h]
deque不只是可以再尾端插入,也可以在队列头插入。deque在STL中是维护多个连续内存的,多个连续的内存不一定连续,一段连续的内存叫做缓冲区。deque的迭代器有4个元素,cur指向当前所指的deque结点,first指向迭代器所指结点所在缓冲区的起始位置,last指向迭代器所指结点所在缓冲区的结尾位置,node指向中控器的某个位置,这个位置指向迭代器所指结点所在的缓冲区原创 2015-08-29 14:14:45 · 662 阅读 · 0 评论 -
STL学习----入门(1)[list]
接着上面:#include://template class T,class Alloc= allocatorT>> class list;列表(List)是一个允许在序列中任何一处位置以常量耗时插入或删除元素且可以双向迭代的顺序容器(Sequence container)。A list is a sequence container t原创 2015-08-24 17:17:04 · 660 阅读 · 0 评论 -
STL学习----入门(1)[array]
继续学习头文件:#include:C++11//template class T,size_t N >class array;数组(Array)是一个固定大小(Fixed-size)的顺序容器(Sequence container)。容器容纳了具体(Specific)数目的元素,这些元素逐个排列在一个严格的线性序列中。The head原创 2015-08-24 17:10:51 · 833 阅读 · 1 评论 -
STL学习----入门(1)[iterator]
接着是iterator文件#include:给迭代器提供定义和支持。类迭代器原语iterator_traits为查询迭代器信息提供了统一的接口(Interface)input_iterator_tag这是一个空类,表明迭代器类型为输入迭代器,是一个标签类型(Tag type)output_iterator_tag这是一个空原创 2015-08-24 16:02:18 · 605 阅读 · 1 评论 -
STL学习----入门(1)[functional]
继续头文件的介绍:#include functional>定义了许多函数对象类型和支持函数对象的功能,函数对象是支持operator()()函数调用运算符的任意对象。类functionC++11将任意类型的可调用(Callable)对象与函数调用的特征封装到一起。mem_fn C++11将成员函数(Member funct原创 2015-08-24 15:44:44 · 2723 阅读 · 2 评论 -
STL学习----入门(1)[deque]
接着上一篇继续学习头文件:#include deque>#include functional>#include iterator>#include array>#include vector>#include list>#include #include #include #include #incl原创 2015-08-24 15:32:56 · 568 阅读 · 0 评论 -
STL学习----入门(1)[algorithm]
STL = Standard Template Library,标准模板库,惠普实验室开发的一系列软件的统称。它是由Alexander Stepanov、Meng Lee和David R Musser在惠普实验室工作时所开发出来的。这可能是一个历史上最令人兴奋的工具的最无聊的术语。从根本上说,STL是一些“容器”的集合,这些“容器”有list,vector,set,ma原创 2015-08-24 15:23:56 · 1022 阅读 · 1 评论 -
STL学习----入门(1)[stack]
#includestack>:// template class T, class Container = dequeT> > class stack;栈(Stack)是一个容器适配器(Container adaptor)类型,被特别设计用来运行于LIFO(Last-in first-out)场景,在该场景中,只能从容器末尾添加(Insert)或提取(Extract)原创 2015-08-24 18:44:21 · 494 阅读 · 0 评论 -
STL学习----入门(1)[forward_list]
学了一半的头文件到这儿了。#include:C++11// template class T, class Alloc = allocatorT> > class forward_list;正向列表(Forward list)是一个允许在序列中任何一处位置以常量耗时插入或删除元素的顺序容器(Sequence container)。A forward_lis原创 2015-08-24 18:13:51 · 1176 阅读 · 0 评论 -
STL学习----入门(1)[utility]
#inlcudeutility>:包含的其它头文件 C++11rel_ops 名称空间std::rel_ops::operator!=,>,=通过用户自定义的 operator== 及 operator函数swap交换两个对象的值forwardC++1原创 2015-08-24 18:47:55 · 653 阅读 · 0 评论 -
STL学习----入门(1)[memory]
#include:类指针类别unique_ptr C++11带唯一独占对象所有权语义的智能指针(Smart pointer)shared_ptr C++11带共享对象所有权语义的智能指针weak_ptr C++11指向由 shared_ptr 管理的对象的弱引用auto_ptr已弃用带严格的对象所有权语义的原创 2015-08-24 18:26:35 · 980 阅读 · 0 评论 -
STL学习----入门(1)[unordered_map]
#include:C++11// template class Key, class T, class Hash = hashKey>, class Pred = equal_toKey>, class Alloc = allocator pairconst Key,T> >> class unordered_map;无序映射表(Unord原创 2015-08-24 18:23:45 · 2187 阅读 · 0 评论