- 博客(63)
- 资源 (6)
- 收藏
- 关注
原创 STL源码剖析 [容器](十七)[stl_multimap.h]
multimap 与 map 一样,都是使用红黑树对记录型的元素数据,按元素键值的比较关系,进行快速的插入、删除和检索操作,所不同的是 multimap 允许将具有重复键值的元素插入容器。在 multimap 容器中,元素的键值与元素的映照数据的映照关系,是多对多的,因此,multimap 称为多重映照容器。multimap 与 map 之间的多重特性差异,类似于 multiset 与 set
2015-08-31 12:04:43 844
原创 STL源码剖析 [容器](十六)[stl_map.h]
map是STL的一个容器,map也是一种关联式容器。它提供一对一(其中第一个可以称为关键字,每个关键字只能在map中出现一次,第二个可能称为该关键字的值)的数据处理能力,有助于我们处理一对一数据。这里说下map内部数据的组织,map内部是自建一颗红黑树(一种非严格意义上的平衡二叉树),这颗树具有对数据自动排序的功能,所以在map内部所有的数据都是有序的。源码:// Filename:
2015-08-31 11:57:40 818
原创 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
原创 STL源码剖析 [容器](十四)[stl_set.h]
set是关联容器。其键值就是实值,实值就是键值,不可以有重复,所以我们不能通过set的迭代器来改变set的元素的值,set拥有和list相同的特性:当对他进行插入和删除操作的时候,操作之前的迭代器依然有效。当然删除了的那个就没效了。set的底层结构是RB-tree,所以是有序的。stl中特别提供了一种针对set的操作的算法:交集set_intersection,并集set_u
2015-08-31 09:58:35 559
原创 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
原创 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
原创 STL源码剖析 [容器](十一)[AVL Tree]
知识解释来源:http://www.cnblogs.com/zhuyf87/archive/2012/11/12/2767136.html(不包括实现)*********************************************************************************************************AVL(Adelson
2015-08-30 16:56:06 653
原创 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
原创 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
原创 STL源码剖析 [容器](八)[priority_queue]
priority_queue,首先它是一个queue,即只允许在低端加入元素,并从顶端取出元素,除此之外别无其他存取元素的途径(故priority_queue不提供遍历功能,也不提供迭代器);再次它具有priority,即queue中的元素具有一定的priority:其内的元素自动依照元素的权值排列,权值最高者(也就是数值最高),排在最前面。注:在queue并非是依照严格的权值递减的顺序排列,而是
2015-08-30 15:12:35 632
原创 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
原创 STL源码剖析 [容器](六)[stl_queue.h]
queue 模板类的定义在头文件中。与stack 模板类很相似,queue 模板类也需要两个模板参数,一个是元素类型,一个容器类型,元素类型是必要的,容器类型是可选的,默认为deque 类型。定义queue 对象的示例代码如下:queue q1;queue q2;queue 的基本操作有:入队,如例:q.push(x); 将x 接到队列的末端。出队,如例:q.pop
2015-08-30 14:09:32 841
原创 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
原创 STL源码剖析 [容器](五)[stl_deque.h]
deque不只是可以再尾端插入,也可以在队列头插入。deque在STL中是维护多个连续内存的,多个连续的内存不一定连续,一段连续的内存叫做缓冲区。deque的迭代器有4个元素,cur指向当前所指的deque结点,first指向迭代器所指结点所在缓冲区的起始位置,last指向迭代器所指结点所在缓冲区的结尾位置,node指向中控器的某个位置,这个位置指向迭代器所指结点所在的缓冲区
2015-08-29 14:14:45 662
原创 STL源码剖析 [容器](四)[stl_pair.h]
Pair模版是C++ STL中短小精干的结构体,被定义在头文件中,把两个值视为一个结构单元,如map和multimap都利用了很多pair对组模版,即为成对元素,另外函数需要返回两个值的时候,也常用pair模版(当然,结构体也一样方便)。注意:pair被定义为结构体而不是类,这样一来他的成员都是公有属性,可以直接访问和赋值。Pair的定义:std::pair p(3,“
2015-08-29 13:48:18 749
原创 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
转载 C++ sizeof用法
转自:http://www.cnblogs.com/lidabo/archive/2012/08/27/2658519.htmlsizeof sizeof操作符的作用是返回一个对象或类型名的长度,长度的单位是字节。返回值的类型是标准库命名为size_t的类型,size_t类型定义在cstddef头文件中,该头文件是C标准库的头文件stddef.h的C++版本。他是一个和
2015-08-28 13:10:05 732
原创 STL源码剖析 [容器](二)
容器学习肯定会看到iterator,所有容器有含有其各自的迭代器型别(iterator types),所以当你使用一般的容器迭代器时,并不需要含入专门的头文件。不过有几种特别的迭代器,例如逆向迭代器,被定义于中。 迭代器共分为五种,分别为: Input iterator、Output iterator、Forward iterator、Bidirectional
2015-08-28 12:18:25 706
原创 Regularized Gaussian Covariance Estimation(学习Free Mind知识整理)
阅读http://freemind.pluskid.org/machine-learning/regularized-gaussian-covariance-estimation/文章中的一些知识整理:====================================================================非常感谢Free Mind能够这么耐心的分析解
2015-08-27 20:17:33 993
原创 Vector Quantization(学习Free Mind知识整理)
阅读http://blog.pluskid.org/?p=57文章中的一些知识整理:=====================================================================矢量量化(Vector Quantization)其实也就是逼近,VQ 是将一个向量空间中的点用其中的一个有限子集来进行编码的过程。Vector Quantization
2015-08-27 19:22:26 2491 3
原创 Spectral Clustering(学习Free Mind知识整理)
阅读http://blog.pluskid.org/?p=287文章中的一些知识整理:本文学习的知识点谱聚类。
2015-08-27 17:54:32 2477
原创 Gaussian Mixture Model(学习Free Mind知识整理)
这篇关于Gaussian Mixture Model(GMM)的文章:http://blog.pluskid.org/?p=39 http://blog.csdn.net/abcjennifer/article/details/8198352===============================================================“高斯分布
2015-08-27 16:30:07 1011
原创 STL源码剖析 [SGI常用算法](stl_algobase.h)
STL标准中没有区分基本算法或复杂算法,单SGI把常用的一些算法(equal,fill,fill_n,iter_swap,lexicographical_compare,max,min,mismatch,swap,copy,copy_backward,copy_n)定义在只中,其他算法定义在中。stl_algobase.h源码:#ifndef __SGI_STL_INTERNAL_ALGO
2015-08-26 19:01:50 1052
原创 STL源码剖析 [特殊的空间配置器](机智的type_traits.h)
Traits就是通过定义一些结构体或类,并利用模板类特化和偏特化的能力,给类型赋予一些特性,这些特性根据类型的不同而异。traits的编程技巧极度弥补了C++语言的不足 traits含义就是特性,应用Trait模板参数,使得我们的程序既保持灵活性,同时减少类型参数的数量。能够使得我们对函数进行更加细粒度的控制。traits技术依靠显示模版特殊化来把代码中因类型不同而发生变化的
2015-08-26 17:05:56 948
原创 STL源码剖析 [特殊的空间配置器](内存基本处理工具stl_uninitialized.h)
简单说明:(http://www.cnblogs.com/wangjzh/p/4106740.html?utm_source=tuicool)uninitialized_copy()使我们能够将内存的配置与对象的建构行为分离开来。如果作为输出目的地的[result, result+(last-first))范围内的每一个迭代器都指向未初始化区域,则uninitialized_copy()会
2015-08-26 16:40:05 585
原创 STL源码剖析 [特殊的空间配置器](内存memory )
因为对于内存布局不是很清楚然后查阅了一些资料,http://www.cnblogs.com/skynet/archive/2011/03/07/1975479.html大概了解了。而STL的就是通过迭代器把数据放入内存空间然后再通过迭代器进行操作。关于STL数据容器放入共享内存,http://www.cppblog.com/doing5552/archive/2010/07/24/121197.h
2015-08-26 16:30:51 486
原创 STL源码剖析 [特殊的空间配置器](对象构造和析构stl_construct.h)
stl_construct定义了全局函数construct()和destroy(),负责对象的构造和析构。在内存上的算法还依赖于两个全局函数,construct()和destroy(),前者负责在指定的内存上调用对象的构造函数,在内存上构造出对象。后者则是相反,在指定内存上调用对象的析构函数,销毁对象。(注意:这两个函数不涉及对象内存的分配和释放,对象构造在指定的已分配好的内
2015-08-26 16:09:59 861
原创 STL源码剖析 [简单的SGI STL空间配置器](defalloc.h)
本文介绍的是一个简单的符合标准的allocator配置器,而在SGI STL中的allocator(实际叫alloc)配置器,这份allocator很简单,只是对::operator new和::operator delete的简单封装而已。下面的allocator完成对内存的分配与回收,但是并没有对象的构造,对象的构造是在stl_construct.h中的函数完成的,之所以将对象的分配和构造(析
2015-08-26 15:38:17 621
原创 STL源码剖析 [配置文件](stl_config.h)
stl-config.h里面主要是定义各种常量,主要是为编译服务的,对各种主流的编译器的编译环境都进行了测试,以便在不同的环境中进行编译,较新主流的编译器都是支持的。这应该是一个比较重要的文件。下面是源码:// Filename: stl_config.h// Comment By: 凝霜// E-mail: mdl2009@vip.qq.com// Blog:
2015-08-26 15:16:48 2024
原创 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
原创 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
转载 模板特化
模板为什么要特化,因为编译器认为,对于特定的类型,如果你能对某一功能更好的实现,那么就该听你的。模板分为类模板与函数模板,特化分为全特化与偏特化。全特化就是限定死模板实现的具体类型,偏特化就是如果这个模板有多个类型,那么只限定其中的一部分。先看类模板:templateclass Test{public: Test(T1 i,T2 j):a(i),b(j){cout<<"模板类"
2015-08-25 14:13:55 701
转载 C++中组合和继承的初始化
在C++中单个类的初始化比较简单就略过不说。当一个类继承了另外一个类,或者是一个类中还存在一个类 class A{、、、};class B{、、、};class C:classA{ private: B bb; int xpublic: C(int ii):B(ii),bb(ii) ,x(ii){};};此
2015-08-25 13:45:51 660
原创 VS2013需牢记的快捷键
1.回到上一个光标位置/前进到下一个光标位置 1)回到上一个光标位置:使用组合键“Ctrl + -”; 2)前进到下一个光标位置:“Ctrl + Shift + - ”。 2.复制/剪切/删除整行代码 1)如果你想复制一整行代码,只需将光标移至该行,再使用组合键“Ctrl+C”来完成复制操作,而无需选择整行。 2)如果你想剪切一整行代码,只需将光标移至该行,再
2015-08-25 13:22:47 530
原创 error C3872: "0xa0": 此字符不允许在标识符中使用(vs2013)
error C3872: '0xa0': this character is not allowed in an identifier这个意思就是说出现中文切换问题。这是因为直接复制代码的问题。0xa0是十六进制数,换成十进制就是160,表示汉字的开始。解决办法:在报错的代码行检查两边的空格,用英文输入法的空格替换掉。
2015-08-25 13:15:39 4897
转载 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
转载 error LNK2019: 无法解析的外部符号 _WinMain@16(VS2013)
一,问题描述MSVCRTD.lib(crtexew.obj) : error LNK2019: 无法解析的外部符号 _WinMain@16,该符号在函数 ___tmainCRTStartup 中被引用 Debug\jk.exe : fatal error LNK1120: 1 个无法解析的外部命令error LNK2001: unresolved external symb
2015-08-25 12:43:53 6253
原创 STL学习----入门(2)[模板介绍]
模板就是实现代码重用机制的一种工具,它可以实现类型参数化,即把类型定义为参数, 从而实现了真正的代码可重用性。模版可以分为两类,一个是函数模版,另外一个是类模版。一、函数模板它的一般形式如下:Template 返回类型 函数名(形参表){//函数定义体 }说明: template是一个声明模板的关键字,表示声明一个模板关键字class不能省略,如果类型形参多余一个
2015-08-25 12:12:25 426
原创 STL学习----入门(2)[组件]
STL提供六大组件:1、 容器(Containers):各种数据结构,如:vector、list、deque、set、map。用来存放数据。从实现的角度来看,STL容器是一种class template。2、 算法(algorithms):各种常用算法,如:sort、search、copy、erase。从实现的角度来看,STL算法是一种 function templ
2015-08-25 11:58:14 423
原创 STL学习----入门(1)[utility]
#inlcudeutility>:包含的其它头文件 C++11rel_ops 名称空间std::rel_ops::operator!=,>,=通过用户自定义的 operator== 及 operator函数swap交换两个对象的值forwardC++1
2015-08-24 18:47:55 653
Tensorflow 实战Google深度学习框架&&TensorFlow;实战(二)
2017-10-17
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人