
C++
臣有一事不知当不当讲
这个作者很懒,什么都没留下…
展开
-
C++中的模板技术
问题引入:C++中有几种交换变量的方法?1、定义宏代码块。优点:代码复用,适合所有类型;缺点:编译器不知道宏的存在,缺少类型检查。 2、定义函数。优点:真正的函数调用,编译器对类型进行检查;缺点:根据类型重复定义函数,无法代码复用。泛型编程——函数模板:一种特殊的函数,可用不同的类型进行调用,与普通函数的区别在于,类型可以被参数化。template关键字,用于声明开始进行泛型编程;typename...原创 2018-03-16 23:00:23 · 1346 阅读 · 0 评论 -
编译错误、警告汇总(不断更新)
test.c:15: warning: incompatible implicit declaration of built-in function ‘malloc’test.c:26: warning: incompatible implicit declaration of built-in function ‘free’解决方法:加入头文件即可#include<stdlib.h>...原创 2018-05-16 18:26:12 · 218 阅读 · 0 评论 -
lambda表达式
c11新特性中加入了lambda表达式,所以Qt 也支持需在.pro文件中加入CONFIG += c++11#include<iostream>using namespace std;int main(){int a = 1;int b = 2;auto func = [=, &b](int c)->int {return b += a + c;};re...转载 2018-06-12 20:50:51 · 186 阅读 · 0 评论 -
C++11 中std::function和std::bind的用法
关于std::function 的用法: 可以理解成函数指针 :void printA(int a){ cout<<a<<endl;}std::function<void(int a)> func;func = printA;func(2);保存lambda表达式:std::function<void()> fu...转载 2018-07-23 18:30:25 · 220 阅读 · 0 评论 -
C++里面,什么时候使用std::wstring
看你要使用什么字符编码了, std::wstring主要用于 UTF-16编码的字符,而std::string主要用于存储单字节的字符( ASCII字符集 ),但是也可以用来保存UTF-8编码的字符。(UTF-8和UTF-16是UNICODE字符集的两种不同的字符编码)如果你的程序支持多种语言,那么使用UTF-16来处理字符会方便一些,因为该编码中的每个字符都占用2个字节;而UTF-8中的字符...转载 2018-07-23 18:49:41 · 33301 阅读 · 4 评论 -
.h 与 .hpp 文件
hpp,其实质就是将.cpp的实现代码混入.h头文件当中,定义与实现都包含在同一文件,则该类的调用者只需要include该hpp文件即可,无需再 将cpp加入到project中进行编译。而实现代码将直接编译到调用者的obj文件中,不再生成单独的obj,采用hpp将大幅度减少调用 project中的cpp文件数与编译次数,也不用再发布烦人的lib与dll,因此非常适合用来编写公用的开源库。...转载 2018-07-23 21:09:50 · 430 阅读 · 0 评论 -
静态库与动态库
所谓静态库,就是在静态编译时由编译器到指定目录寻找并且进行链接,一旦链接完成,最终的可执行程序中就包含了该库文件中的所有有用信息,包括代码段、数据段等。所谓动态库,就是在应用程序运行时,由操作系统根据应用程序的请求,动态到指定目录下寻找并装载入内存中,同时需要进行地址重定向。 win32平台下,静态库通常后缀为.lib,动态库为.dll linux平台下,静态库通常后缀为.a,动态库为.so 从本...转载 2018-07-23 21:19:04 · 256 阅读 · 0 评论 -
C++插件架构浅谈与初步实现
一、插件架构初步介绍 想到写本博客,也没想到更好的名字,目前就先命这个名吧。说到插件架构,或许大部分IT从业者都听过或者某些牛人也自己实现过稳定高效的插件框架。目前有很多软件以及库都是基于插件架构,例如PS、我所在行业的GIS软件如Arcgis、QGIS、还比如开源图形引擎OGRE以及OSG,这些都是插件架构,通过插件架构来进行功能的扩展。那到底什么是插件架构呢?我的理解是系统运行时在需...转载 2018-07-24 14:37:37 · 13520 阅读 · 2 评论 -
回调函数的实质——什么是回调函数,为什么要使用回调函数
在C/C++里面,函数的概念很好理解,就是把某个任务独立出来,封装在一起,然后给它取个名字,它可以有参数和返回值。那么,回调函数是个什么鬼呢?它和函数到底有何异同?既然已经有了函数,为啥还非要生出个回调函数来?想必,小伙伴们在刚碰到这个概念的时候,都会被这些问题困扰。网上搜一搜,有很多相关的材料,但是未必透彻。我觉得要真正理解一个概念,必须要先理解它存在的意义,也就是它为什么要存在,它能带来什么方...转载 2018-07-24 21:03:27 · 1202 阅读 · 0 评论 -
memset()函数
将s所指向的某一块内存中的每个字节的内容全部设置为ch指定的ASCII值,块的大小由第三个参数指定,这个函数通常为新申请的内存做初始化工作。void *memset(void *s, char ch, unsigned n);” 将s所指向的某一块内存中的每个字节的内容全部设置为ch指定的ASCII值有什么用?为什么说“这个函数通常为新申请的内存做初始化工作?答:刚分配的内存空间,或...原创 2018-05-17 19:51:06 · 249 阅读 · 0 评论 -
八皇后问题
判断一个位置上能否放皇后,只需在三个方向上进行判断(下、右下、左下)。关键数据结构定义: int m_chessboard[N][N]; //定义棋盘enum{ N = SIZE + 2}; //10 * 10 的棋盘0表示位置为空,1表示皇后,2表示边界位置: struct Pos : public Object { Pos(int px=0, int py=...原创 2018-04-21 17:29:55 · 145 阅读 · 0 评论 -
C和C++中一些概念的本质(不断更新,欢迎交流)
引用的本质:引用是一个特殊的变量,这个变量的内容是绑定在这个引用上面的对象的地址,使用这个变量时,系统就会自动根据这个地址去找到它绑定的变量,然后再对变量进行操作。所以本质上来说,引用还是指针,只是这个指针不能修改,任何对它的操作都会发生在这个指针所指向的地方,而不是在这个指针上。代理的本质:通过代理对对象的操作,是通过引用或者指针来进行的,通过这种方式,就可以提高效率。free()函数的本质: ...原创 2018-04-14 21:38:29 · 342 阅读 · 0 评论 -
C++设计模式之代理模式
问题:当待排的数据元素为体积庞大的对象时,如何提高排序的效率?更换算法的改善能力如果不足以满足效率的提高要求?问题分析:排序过程中不可避免地需要进行交换操作 交换操作的本质是数据元素间的相互复制; 当数据元素体积较大时,交换操作耗时巨大。所以问题变成了如何提高交换操作的效率?新的设计模式:代理模式1、为待排数据元素设置代理对象;2、对代理...原创 2018-04-14 21:38:38 · 169 阅读 · 0 评论 -
二阶构造模式
C++语言学习(五)——二阶构造模式一、构造函数的问题 构造函数存在问题: A、构造函数只提供自动初始化成员变量的机会 B、不能保证初始化逻辑一定成功,如申请系统资源可能失败 C、执行return语句后构造函数立即结束 构造函数创建的对象可能是半成品对象,半成品对象是合法的对象,但是是程序bug的来源之一。因此实际工程开发过程中使用二阶构造模式。二、二阶构造模式 ...转载 2018-04-23 16:55:54 · 284 阅读 · 0 评论 -
C++中四种交换数值的方法
#include <iostream>using namespace std;void Swap1(int &a, int &b){ int c = a; a = b; b = c;}void Swap2(int& a, int& b){ a = a ^ b; b = a ^ b; a =...原创 2018-04-30 23:08:00 · 5193 阅读 · 0 评论 -
C中四种交换数值的方法
#define SWAP1(a, b) \{ \ int temp = a; \ a = b; \ b = temp; \}#define SWAP2(a, b) \{ \ a = a + b; \ b = a - b; \...原创 2018-04-30 23:09:48 · 1153 阅读 · 0 评论 -
new/delete 详解
转载from: https://blog.youkuaiyun.com/hihozoo/article/details/51441521一、new/delete 简介new 和 delete 是 C++ 用于管理 堆内存 的两个运算符,对应于 C 语言中的 malloc 和 free,但是 malloc 和 free 是函数,new 和 delete 是运算符。除此之外,new 在申请内存的同时,还会调用...转载 2018-04-19 21:35:51 · 434 阅读 · 0 评论 -
五、字符串类的实现及子串查找算法
一、字符串类的创建问题提出:C语言不支持真正意义上的字符串C语言使用字符数组(“\0”结束)和一组函数实现字符串操作C语言不支持自定义类型,因此无法获得字符串类型。C++中的原生类型系统中是否包含字符串类型?——No!C++通过库来支持字符串类型——标准库。STL和Qt都有自己实现的字符串类型,会出现不兼容的情况。所以我们可以自己实现字符串类来作为一个通用的库来使用。通过面向对象的技术来对C语言中...原创 2018-04-19 22:04:49 · 12775 阅读 · 0 评论 -
六、递归的思想与应用
递归是一种数学上分而治之的思想:将原问题分解为规模较小的问题进行处理;分解后的问题与原问题的类型完全相同,但规模较小通过小规模问题的分解,能够轻易求得原问题的解问题的分解是有限的(递归不能无限进行)当边界条件不满足时,分解问题(递归继续进行)当边界条件满足时,直接求解(递归结束)递归在程序设计中的应用:递归函数: 函数体中存在自我调用的函数;——问题的分解 ...原创 2018-04-20 22:15:07 · 275 阅读 · 0 评论 -
C++ STL中的 iterator 和 const_iterator
我们在C++中使用STL的容器时,经常会用到迭代器。使用迭代器可以很方便的进行容器元素遍历和修改等操作。近日,在使用Visual Studio 2015编程的时候发现,set的迭代器直接就是const_iterator类型,而vector的迭代器则是普通的iterator类型,这是为什么呢?今天就和大家一起来探究一下。Set/Map类型1 set<int>::iterat...转载 2018-07-24 21:05:24 · 861 阅读 · 0 评论