
C-C++
文章平均质量分 91
WizardtoH
做一个快乐的、优秀的码农
展开
-
C/C++基本数据类型
1、基本数据类型 布尔型:bool 字符型:char 整形 :short int long 浮点型:float double2、数据范围bool flase~true(1 Byte)char -128 ~ +127 (1 Byte)short -32767 ~ + 32768 (2 Bytes)int -2147483648 ~ +2147483647 (4 Byt原创 2016-12-23 10:38:28 · 388 阅读 · 0 评论 -
《深入应用C++11》笔记-互斥量std::mutex、锁std::lock_guard
上一篇:《深入应用C++11》笔记-线程std::threadC++11中提供了std::mutex互斥量,共包含四种类型:std::mutex:最基本的mutex类。std::recursive_mutex:递归mutex类。std::time_mutex:定时mutex类。std::recursive_timed_mutex:定时递归mutex类。另外,还提供了两种锁类型...原创 2018-08-11 22:58:47 · 14403 阅读 · 1 评论 -
《STL源码剖析》笔记-vector
上一篇:《STL源码剖析》笔记-容器的分类vector的元素排列和操作方式与array很相似,不同的是vector是动态空间,能够随着元素的添加自动扩展空间。它的实现关键在于对大小的控制以及重新配置空间时移动元素的效率。vector的迭代器// alloc是SGI STL的默认空间配置器template <class T, class Alloc=alloc>cla原创 2018-09-09 22:03:41 · 1316 阅读 · 0 评论 -
《STL源码剖析》笔记-stack、queue
上一篇:《STL源码剖析》笔记-dequestack是一种先进后出的数据结构,它只有一个出口,只能够在顶端新增、移除、取得元素,没有其他方式进行操作。并且stack默认示意deque作为基础容器来实现的,因为vector在扩容的时候有较差的时间复杂度,而list虽然有平稳的时间复杂度,但是总体平均复杂度较高,所以折中使用deque作为stack的底层容器。另外stack没有迭代器,因为只支持先...原创 2018-09-16 09:58:16 · 397 阅读 · 0 评论 -
《STL源码剖析》笔记-容器的分类
上一篇:《STL源码剖析》笔记-迭代器iterators任何特定的数据结构都是为了实现某种特定的算法,STL中的容器是将运用最广的一些数据结构进行实现,例如:数组array、链表list、树tree、堆栈stack、队列queue、散列表hash talbe、集合set、映射表map等。根据数据在容器中的排列特性,可以分为序列式容器和关联式容器。 序列式容器序列式容器,其中的元素都可...原创 2018-09-06 23:58:44 · 514 阅读 · 0 评论 -
《STL源码剖析》笔记-priority_queue、heap算法
上一篇:《STL源码剖析》笔记-stack、queuepriority_queue是一个带权值的队列,权值最高的自动排在最前面,默认排序从大到小,同时具有队列先进先出、没有迭代器的特性。priority_queue也是一种container adapter,底层容器默认为vector。stack定义完整列表// 排序方式less(从大到小),也能指定为greater(从小到大)templa...原创 2018-09-22 00:13:04 · 492 阅读 · 0 评论 -
《STL源码剖析》笔记-树的介绍
上一篇:《STL源码剖析》笔记-priority_queue、heap算法序列式容器介绍完后就是关联式容器,关联式容器内部数据结构大多是平衡二叉树以获得较好的搜寻效率,因此先对树进行大概的了解。树由节点(nodes)和边(edges)构成。整棵树有一个最上端节点,称为根节点(root)。每个节点可以拥有具有方向性的边(directed edges),用来和其他节点相连。相连节点之中,在上者称为...原创 2018-09-22 22:11:42 · 546 阅读 · 0 评论 -
《STL源码剖析》笔记-set
上一篇:《STL源码剖析》笔记-RB-treeset容器的特性就是所有元素都会根据键值进行自动排序,和map不同的是set的键值就是实值。并且通过set的迭代器无法改变set的键值,因为改变键值会打破set的排序。set排序的特性能够由rb-tree实现且所需接口rb-tree都已经提供,所以set底层采用了rb-tree。// 默认使用递增排序template <class Key,...原创 2018-10-12 19:32:00 · 346 阅读 · 0 评论 -
《STL源码剖析》笔记-map
上一篇:《STL源码剖析》笔记-setmap容器的特性是所有元素都会根据键值自动排序,并且所有元素都是pair,拥有键值和实值。pair的第一个元素为键值,第二个元素为实值。map当中不允许存在两个键值相同的元素。pair的定义pair定义了两个模板参数,并且访问权限为public。template <class T1, class T2>struct pair { ty...原创 2018-10-13 10:02:00 · 593 阅读 · 0 评论 -
《STL源码剖析》笔记-multiset/multimap
上一篇:《STL源码剖析》笔记-map原创 2018-10-16 16:54:13 · 343 阅读 · 0 评论 -
《STL源码剖析》笔记-hash_set、hash_map
上一篇:《STL源码剖析》笔记-hashtablehash_sethash_set底层机制由hashtable提供,和set一样能够快速搜索元素,但是set元素插入后会自动排序,而hash_set是无序的。template <class Value, class HashFcn = hash<Value>, class EqualKey = equal_to<...原创 2018-10-22 09:13:42 · 406 阅读 · 0 评论 -
《STL源码剖析》笔记-RB-tree
上一篇:《STL源码剖析》笔记-树的介绍除了上一篇说到的AVL-tree之外,另一个常用的平衡二叉搜索树是RB-tree(红黑树)。RB-tree满足二叉搜索树的规则之外,还遵循以下特性:每个节点不是红色就是黑色。根节点为黑色。如果节点为红色,其子节点必须为黑色。任意一个节点到到NULL(树尾端)的任何路径,所含之黑色节点数必须相同。第四个特性和第三个特性确保了没有一条路径会比其他...原创 2018-10-10 18:40:25 · 767 阅读 · 0 评论 -
《STL源码剖析》笔记-hashtable
上一篇:《STL源码剖析》笔记-multiset/multimap原创 2018-10-21 17:38:08 · 474 阅读 · 0 评论 -
《STL源码剖析》笔记-算法
上一篇:《STL源码剖析》笔记-hash_multiset、hash_multimapSTL提供了很多算法,以下列出部分常用的算法:int main(int argc, char* argv[]){ std::vector<int> vec = {0,1,2,3,4,5,6,7,8,9}; // accumulate:计算指定容器区域中,以0原创 2018-10-31 23:03:45 · 349 阅读 · 0 评论 -
《STL源码剖析》笔记-hash_multiset、hash_multimap
上一篇:《STL源码剖析》笔记-hash_set、hash_maphash_multiset/hash_multimap与hash_set/hash_map特性一致,区别在于multiset/multimap的键值能够重复。也就是说,他们使用了hashtable的insert_equal而非insert_unique。hash_multiset和hash_set的区别:... templ...原创 2018-10-24 22:05:19 · 290 阅读 · 0 评论 -
《STL源码剖析》笔记-配接器adapters
上一篇:《STL源码剖析》笔记-仿函数(函数对象)配接器adapters在STL中起到转换、连接的作用,包括仿函数配接器(function adapter)、容器配接器(container adapter)、迭代器配接器(iterator adapter)。容器配接器在介绍序列式容器queue和stack时(https://blog.youkuaiyun.com/WizardtoH/article/de...原创 2018-11-03 12:57:13 · 334 阅读 · 0 评论 -
《深入理解C++11》笔记-Unicode编码支持和原生字符串字面量
std::codecvt std::wstring_convert std::locale原创 2018-08-01 23:00:13 · 1845 阅读 · 0 评论 -
《深入应用C++11》笔记-线程std::thread
上一篇:《深入应用C++11》笔记-std::function和bind原来开发多线程在windows和linux各有各的接口,C++ 11有了标准的线程库:std::thread。std::thread定义了四个构造函数:默认构造函数,创建一个空的 std::thread 执行对象。 初始化构造函数,创建一个 std::thread 对象,该std::thread 对象可被 join...原创 2018-08-05 22:54:51 · 2448 阅读 · 0 评论 -
《深入理解C++11》笔记-对齐支持和通用属性
上一篇:《深入理解C++11》笔记-lambda函数本篇介绍的内容都是提升程序运行效率相关的内容,但是使用不当有可能会对程序的稳定性造成影响或者反而使效率下降,因此使用前要有充分的了解和把握。对齐支持alignof和alignas我们都知道结构体数据会进行字节对齐以保证运行效率,再让我们回顾一下具体的原因。一、什么是字节对齐 现代计算机中,内存空间按照字节划分,理论上可以...原创 2018-07-30 21:27:04 · 1066 阅读 · 1 评论 -
数组
所谓数组,是相同数据类型的元素按一定顺序排列的集合(百度百科链接) 1、数组定义 类型说明符 数组名 [常量表达式]; 例如: int arrayInt[10];float arrayFloat[10];int arrayInt[10];代表数组名称为array,存放类型为int,元素数量为10。 所有数据结构都能用于数组。那为什么叫数组?可能是用在数字上比较多吧。2、数组初始化 全部原创 2016-12-23 11:12:56 · 339 阅读 · 0 评论 -
结构体/枚举/共用体
C语法、C++语法原创 2016-12-23 11:08:30 · 467 阅读 · 0 评论 -
函数基本概念
C++语法原创 2016-12-23 11:11:04 · 507 阅读 · 0 评论 -
《深入理解C++11》笔记--简介
学习C++11之前,先来了解一下C++的历史。1979年,Bjame Sgoustrup到了Bell实验室,开始从事将C改良为带类的C(C with classes)的工作,1983年该语言被正式命名为C++。自从C++被发明以来,它经历了3次主要的修订,每一次修订都为C++增加了新的特征并作了一些修改。第一次修订是在1985年,第二次修订是在1990年。第三次是C++的标准化,一直到1...原创 2018-06-03 13:35:37 · 812 阅读 · 0 评论 -
《深入理解C++11》笔记--兼容C99
就像上一篇文章说到,第一个C++标准是C++98,也就是在1998年推出,而2003年只是对一些缺陷进行了修复。而上一个最新的C标准C99是在1999年推出,因此C++11之前是不支持C99标准的,在C++11中加入了对C99的支持,包括以下内容:C99的预定义宏预定义标识符号__func___Pragma操作符不定参数宏定义以及__VA_ARGS__宽窄字符串连接C99的预定...原创 2018-06-03 16:44:45 · 859 阅读 · 1 评论 -
《深入理解C++11》笔记--扩展
上一篇:《深入理解C++11》笔记–兼容C99 本篇介绍第一章中间部分的内容。 这部分内容主要是对原有的一些关键字、类型、宏等进行了扩展。long long整型扩展的整形宏__cplusplus静态断言noexcept修饰符、noexcept操作符快速初始化成员变量非静态成员的sizeof扩展的friend语法final/override控制long long整型...原创 2018-06-06 23:19:37 · 1351 阅读 · 1 评论 -
《深入理解C++11》笔记–构造函数
上一篇:《深入理解C++11》笔记–模板 这篇文章介绍的了第三章中构造函数相关的内容。 继承构造函数 派生类的构造函数往往需要调用基类的构造函数,例如:class Base{public: Base(int a): i(a){}private: int i;};class Inherit:public Base{public: Inherit(i...原创 2018-06-16 13:31:01 · 773 阅读 · 0 评论 -
《深入理解C++11》笔记–POD类型
上一篇:《深入理解C++11》笔记–列表初始化 本编继续介绍第三章的内容:POD类型,plain old data。Plain代表数据是普通类型,old代表能与C兼容支持memcpy、memset等函数。POD分为两个部分,trival(平凡的)和(s’tan’dard layout)标准布局的。平台的类或结构体必须满足以下的条件: - 平凡的默认构造函数和析构函数。只要是自己定义了函数...原创 2018-06-24 14:03:05 · 3947 阅读 · 0 评论 -
《深入理解C++11》笔记–非受限联合体
上一篇:《深入理解C++11》笔记–POD类型 本编继续介绍第三章的内容:非受限联合体。在这之前我们先回顾一下联合体的用法:union Example{ char c[4]; int i;};int main(){ Example example; example.c[0] = 0x04; example.c[1] = 0x03; exa...原创 2018-06-24 18:23:19 · 851 阅读 · 0 评论 -
《深入理解C++11》笔记-用户自定义字面量
上一篇:《深入理解C++11》笔记–非受限联合体 本篇继续介绍第三章的内容:用户自定义字面量。字面量是什么意思呢?例如:int a = 0; // a为变量,0为字面量自定义字面量就是我们自己规定一个字面量格式来作为一些值的定义,具体代码如下:class Example{public: Example(int i, int j):a(i), b(j){} int...原创 2018-06-24 22:45:10 · 811 阅读 · 2 评论 -
《深入理解C++11》笔记–右值引用:移动语义和完美转发
上一篇:《深入理解C++11》笔记–构造函数 这篇文章介绍的了第三章中右值引用相关的内容。在介绍该内容之前,会对一些相关问题进行解释,便于理解后面的内容。 指针成员和拷贝构造 当一个类中含有指针成员时,由于默认的拷贝构造函数只会进行浅拷贝,所以当我们写出一下代码时:class Base{public: Base():data(new int(0)){} //Base...原创 2018-06-17 19:59:34 · 5612 阅读 · 1 评论 -
《深入理解C++11》笔记–显式转换操作符
上一篇:《深入理解C++11》笔记–右值引用:移动语义和完美转发 本编继续介绍第三章中的内容,显式转换操作符。 在介绍显式转换操作符之前先讨论一下C++的隐式转换,我们都知道很多时候C++会自动对类型进行转换,很多时候会比较方便,但是也会有一些问题,例如下面的例子:class ExampleA{public: ExampleA(int a = 0):data(a) {}priv...原创 2018-06-18 21:10:00 · 588 阅读 · 0 评论 -
《深入理解C++11》笔记–列表初始化
上一篇:《深入理解C++11》笔记–显式转换操作符 本编继续介绍第三章中的内容:列表初始化。 原来C++可以铜鼓花括号{}对数组元素进行统一初始化。例如:int a[5] = {0};int b[5] = {1, 2, 3, 4, 5};但是自定义的类型无法使用这种列表初始化,例如vector就不行,而C++11扩展了对自定义类型列表初始化的支持。int a[5] = {0};...原创 2018-06-18 21:57:54 · 586 阅读 · 0 评论 -
《深入理解C++11》笔记-常量表达式
size_t r_fib(size_t n) noexcept{ if (n == 0) return 0; if (n == 1) return 1; return r_fib(n - 1) + r_fib(n - 2);}constexpr size_t c_fib(size_t n) noexcept{ return n == 1 ? 1 : (n ...原创 2018-07-15 16:51:58 · 733 阅读 · 0 评论 -
《深入理解C++11》笔记-lambda函数
上一篇:《深入理解C++11》笔记-默认函数的控制lambda函数lambda函数是什么?还是直接看代码比较容易理解:int main(){ int a = 1; int b = 2; // 定义一个lambda函数 auto sum = [](int x, int y)->int{ return x + y; }; ...原创 2018-07-26 23:08:01 · 1014 阅读 · 1 评论 -
《STL源码剖析》笔记-仿函数(函数对象)
上一篇:《STL源码剖析》笔记-算法原创 2018-11-01 18:13:57 · 399 阅读 · 0 评论