c++
LYR1994
这个作者很懒,什么都没留下…
展开
-
动态链接库 Dynamic Linkable Library(dll)的原理与设计
动态链接库编程之基础慨念 DLL(Dynamic Linkable Library):可以看做是一种仓库,提供了一些可以直接拿来用的变量、函数或类。静态链接库与动态链接库都是共享代码的方式,如果采用静态链接库,则无论你愿不愿意,lib中的指令都被直接包含在最终生成的EXE文件中了。但是若使用DLL,该DLL不必被包含在最终EXE文件中,EXE文件执行时可以“动态”地引用和卸载这个与EXE独立的DLL文件。 DLL 的编制与具体的编程语言及编译器无关。只要遵循约定的DLL接口规范和调...原创 2020-08-31 22:18:45 · 433 阅读 · 0 评论 -
C++ 资源大全(各种库)---------伯乐在线
摘要:C++是在C语言的基础上开发的一种集面向对象编程、泛型编程和过程化编程于一体的编程语言。应用较为广泛,是一种静态数据类型检查的,支持多重编程的通用程序设计语言。关于 C++ 框架、库和资源的一些汇总列表,由fffaraz发起和维护。内容包括:标准库、Web应用框架、人工智能、数据库、图片处理、机器学习、日志、代码分析等。标准库C++ Standard Library:是一系列类和函数的集合,使用核心语言编写,也是C++ISO自身标准的一部分。 Stan...原创 2020-07-28 21:52:39 · 698 阅读 · 1 评论 -
C++ _内存控制_侯捷
内存控制原创 2020-07-15 22:38:06 · 194 阅读 · 0 评论 -
序列化:简单通用的数据交换格式JSON、MessagePack 和 ProtoBuffer
序列化,就是把内存里“活的对象”转换成静止的字节序列,便于存储和网络传输;而反序列化则是反向操作,从静止的字节序列重新构建出内存里可用的对象。数据交换格式:JSON、MessagePack 和 ProtoBuffer。对数据做序列化和反序列化:JSON:JSON 是一种轻量级的数据交换格式,采用纯文本表示,所以是“human readable”,阅读和修改都很方便。JSON。第三工具:精选出序列化 / 反序列化、网络通信、脚本语言混合编程和性能分析这四类工具。由于 JSON 起源于“最流行的脚本语原创 2020-06-09 16:53:46 · 1952 阅读 · 1 评论 -
多线程与并发:multithreading and Concurrency
线程(thread):在 C++ 语言里,线程就是一个能够独立运行的函数。比如你写一个 lambda 表达式,就可以让它在线程里跑起来:auto f = []() // 定义一个lambda表达式{ cout << "tid=" << this_thread::get_id() << endl;};thread t(f); // 启动一个线程,运行函数f任何程序一开原创 2020-06-08 02:12:52 · 342 阅读 · 0 评论 -
for_each 解读
目录迭代器for_each排序算法查找算法在 C++ 里,算法的地位非常高,甚至有一个专门的“算法库”。早期,它是泛型编程的示范和应用,而在 C++ 引入 lambda 表达式后,它又成了函数式编程的具体实践,所以,学习掌握算法能够很好地训练你的编程思维,帮你开辟出面向对象之外的新天地。在代码里普遍应用 vector、set、map,但几乎从来不用任何算法,聊起算法这个话题,也是“一问三不知”,这的确是一个比较奇怪的现象。C++ 里的算法,指的是工作在容器上的一些泛型函数,会对.原创 2020-06-04 01:43:58 · 3375 阅读 · 1 评论 -
C++ 泛型编程范式的基础:容器
容器,就是能够“容纳”“存放”元素的一些数据结构。“算法 + 数据结构 = 程序。”在 C++ 里,容器就是这个公式里面的“数据结构”。1. 容器所谓的数据结构,就是数据在计算机里的存储和组织形式,比如堆、数组、链表、二叉树、B+ 树、哈希表,等等。有一种数据结构是万能的、可以应用于任何场景。毕竟,不同的数据结构存储数据的形式不一样,效率也就不一样。有的是连续存放,有的是分散存放,有的存储效率高,有的查找效率高,我们必须要依据具体的应用场合来进行取舍。对于最基本、最经典的那些数据结构,C++ 标准库里原创 2020-06-02 13:36:01 · 497 阅读 · 0 评论 -
那些书
设计模式:可复用面向对象软件的基础C++ 标准程序库C++ 语言的设计与演化C++ Primer原创 2020-06-02 12:16:27 · 144 阅读 · 0 评论 -
c++标椎库:文本处理
字符串对于 C++ 里的字符串类 string,string 其实并不是一个“真正的类型”,而是模板类 basic_string 的特化形式,是一个 typedef:using string = std::basic_string<char>; // string其实是一个类型别名所谓的字符串,就是字符的序列。字符是人类语言、文字的计算机表示,而人类语言、文字又有很多种,相应的编码方式也有很多种。所以,C++ 就为字符串设计出了模板类 basic_string,再用模板来搭配原创 2020-06-02 12:15:07 · 723 阅读 · 0 评论 -
异常处理:exception机制
尽量不用裸指针、new 和 delete,因为它们很危险,容易导致严重错误。这就引出了一个问题,如何正确且优雅地处理运行时的错误。实际上,想要达成这个目标,还真不是件简单的事情。程序在运行的时候不可能“一帆风顺”,总会遇到这样那样的内外部故障,而我们写程序的人就要尽量考虑周全,准备各种“预案”,让程序即使遇到问题也能够妥善处理,保证“健壮性”。C++ 处理错误的标准方案是“异常”(exception)。虽然它已经在 Java、C#、Python 等语言中得到了广泛的认可和应用,但在 C++ 里却存在诸多原创 2020-06-02 01:04:16 · 769 阅读 · 0 评论 -
函数式表达式:lambda
C++ 函数的特殊性“函数式编程”,就要先从函数(function)说起。C++ 里的函数概念来源于 C,是面向过程编程范式的基本部件。但严格来说,它其实应该叫“子过程”(sub-procedure)、“子例程”(sub-routine),是命令的集合、操作步骤的抽象。函数的目的是封装执行的细节,简化程序的复杂度,但因为它有入口参数,有返回值,形式上和数学里的函数很像,所以就被称为“函数”。在语法层面上,C/C++ 里的函数是比较特别的。虽然有函数类型,但不存在对应类型的变量,不能直接操作.原创 2020-06-02 00:33:49 · 534 阅读 · 0 评论 -
智能指针的使用:smart_ptr
在现代 C++ 中,绝对不要再使用“裸指针(naked pointer)”了,不要用const 可以修饰指针,而是应该使用“智能指针(smart pointer)”。智能指针所谓的“智能指针”,当然是相对于“不智能指针”,也就是“裸指针”而言的。裸指针,它有时候也被称为原始指针,或者直接简称为指针。指针是源自 C 语言的概念,本质上是一个内存地址索引,代表了一小片内存区域(也可能会很大),能够直接读写内存。因为它完全映射了计算机硬件,所以操作效率高,是 C/C++ 高效的根源。当然,这也是.原创 2020-06-01 22:58:48 · 469 阅读 · 0 评论 -
常量变量: const/volatile/mutable
常量变量: const/volatile/mutableconst 与 volatileconst ,表示“常量”。最简单的用法就是,定义程序用到的数字、字符串常量,代替宏定义。const int MAX_LEN = 1024;const std::string NAME = "metroid";从 C++ 程序的生命周期角度来看的话,const和宏定义还是有本质区别的:const 定义的常量在预处理阶段并不存在,而是直到运行阶段才会出现。所以,准确地说,它实际上是..原创 2020-06-01 21:44:41 · 365 阅读 · 0 评论 -
自动类型推导:auto/decltype
自动类型推导把这个词分解成三个部分:“自动”“类型”和“推导”。“自动”就是让计算机去做,而不是人去做,相对的是“手动”。 “类型”指的是操作目标,出来的是编译阶段的类型,而不是数值。 “推导”就是演算、运算,把隐含的值给算出来。像计算“a = 1 + 1”,你可以在写代码的时候直接填上 2,这就是“手动数值推导”。只写上表达式,让电脑在运行时自己算,这就是“自动数值推导”。因为 C++ 是一种静态强类型的语言,任何变量都要有一个确定的类型,否则就不能用。这在变量类型简单的时候还好说,比如原创 2020-06-01 17:09:31 · 550 阅读 · 1 评论 -
运行阶段及面向对象技巧
运行阶段跟前面的编码、预处理和编译阶段不同,它是动态的、实时的,内外部环境非常复杂,CPU、内存、磁盘、信号、网络套接字……各种资源交织在一起,可谓千变万化。解决这个阶段面临的问题已经不是编程技术了,更多的是要依靠各种调试、分析、日志工具,比如 GDB、Valgrind、Systemtap 等。设计思想首先要说的是,虽然很多语言都内建语法支持面向对象编程,但它本质上是一种设计思想、方法,与语言细节无关,要点是抽象(Abstraction)和封装(Encapsulation)。即使是像 C 这样“纯”面原创 2020-06-01 16:23:10 · 219 阅读 · 0 评论 -
编译阶段:属性和静态断言
编译阶段的目标是生成计算机可识别的机器码(machine instruction code)。而编码阶段和预处理阶段的主要工作还是“文本编辑”,生成的是人类可识别的源码(source code)。编译阶段的特殊性在于,它看到的都是 C++ 语法实体,比如 typedef、using、template、struct/class 这些关键字定义的类型,而不是运行阶段的变量。所以,这时的编程思维方式与平常大不相同。比如说,让编译器递归计算斐波那契数列,这已经算是一个比较容易理解的编译阶段数值计算用法了:tem原创 2020-06-01 14:46:11 · 508 阅读 · 0 评论 -
预处理阶段:宏定义与条件编译
预处理阶段:宏定义与条件编译预处理编程预处理阶段编程的操作目标是“源码”,用各种指令控制预处理器,把源码改造成另一种形式,就像是捏橡皮泥一样。C++ 语言有近百个关键字,预处理指令只有十来个,实在是少得可怜。而且,常用的也就是 #include、#define、#if,所以很容易掌握。首先,预处理指令都以符号“#”开头,虽然都在一个源文件里,但它不属于 C++ 语言,它走的是预处理器,不受 C++ 语法规则的约束。一般来说,预处理指令不应该受 C++ 代码缩进层次的影响,不管是在函数、类里.原创 2020-06-01 01:13:48 · 2571 阅读 · 0 评论 -
C++生命周期和编程范式
目录1 C++ 程序的生命周期四个阶段编码阶段预处理编译阶段运行阶段2 C++ 语言的编程范式面向过程面向对象泛型编程函数式1 C++ 程序的生命周期四个阶段C++ 程序本身就已经处在“开发”阶段了,所以不会有“需求分析”“设计”这样的写文档过程。所以,一个 C++ 程序从“诞生”到“消亡”,要经历这么几个阶段:编码(Coding)、预处理(Pre-processing)、编译(Compiling)和运行(Running)。编码阶段...原创 2020-06-01 00:45:53 · 1093 阅读 · 0 评论 -
如何在C/C++捕捉计算机程序中某段Function所消耗运行时间?
clock():捕捉从程序开始运行到clock()被调用时所耗费的时间。这个时间单位是clock tick,即“时钟打点”。常数CLK_TCK(或CLOCKS_PER_SEC):机器时钟每秒所走的时钟打点数。#include <stdio.h>#include <time.h>clock_t start, stop; /* clock_t是clock()函数返回...原创 2020-05-08 01:20:10 · 393 阅读 · 0 评论 -
枚举算法——完美立方、生理周期、称硬币、熄灯问题
枚举:基于逐个尝试答案的一种问题求解策略。完美立方:形如a3= b3 + c3 + d3的等式被称为完美立方等式。例如 123= 63 + 83 + 103 。编写一个程序,对任给的正整数N (N≤100),寻找所有的四元组(a, b, c, d),使得a3 = b3 + c3 + d3,其中a,b,c,d 大于 1, 小于等于N,且b<=c<=d。解:Cube = a, Tr...原创 2020-04-18 00:49:47 · 556 阅读 · 0 评论 -
C++ 之造物之术(零)
1. About C++2. "C++" and its father3. C++ Programming Paradigm4. Language Evolution & Standards5. Programming term6. C++ Source Files & Coding Conventions7. Name Space8. Steps of...原创 2020-04-13 13:14:45 · 1790 阅读 · 0 评论 -
C++ 学习指南基础(五)
121. Class Template Instantiation类模版实例化 类模板实例化 1.1. 显式实例化template class Stack<int>; // 将类模板实例化为一个处理int类型的Stack类1.2. 隐式实例化Stack<char> charStack; // 先实例化一个CharStack类(名字...原创 2020-04-13 11:58:59 · 396 阅读 · 0 评论 -
C++ 学习指南基础(四)
目录81. Formating Output82. Functions for I/O Stream83. File Open Mode84. Introduction to Binary IO85. How to Do Binary Input/Output86. File Positioner87. Random Access File88. Operat...原创 2020-04-13 11:52:18 · 1272 阅读 · 0 评论 -
C++ 学习指南基础(三)
61. Inheritance继承 Inheritance (继承) 1.1. 自行车的例子 继承链上的类的对应叫法 基类 / Base Class 派生类 / Derived Class 父类 / Parent Class 子类 / Child Class 超类 / SuperClass 子类 / SubCla...原创 2020-04-06 11:34:33 · 930 阅读 · 0 评论 -
C++ 学习指南基础(二)
目录11. Reference12. Nullptr and Dynamic Memory Allocation13. Boolean data type14. List Initialization15. Type conversion16. C++11 Enhancement for Type System17. Automatic Type Deductio...原创 2020-04-06 01:34:37 · 1120 阅读 · 0 评论 -
C++ 学习指南基础(一)
目录1. About C++2. "C++" and its father3. C++ Programming Paradigm4. Language Evolution & Standards5. Programming term6. C++ Source Files & Coding Conventions7. Name Space8...原创 2020-04-06 01:22:49 · 1910 阅读 · 0 评论