C++基础
文章平均质量分 88
SimpleFelix
编程是一种修行...
展开
-
分治算法设计:切割篱笆问题
切割篱笆问题假设有道篱笆用N个同宽的木条拼接而成。因年久失修,有些木板已经折断,因而整个篱笆呈现出参差不齐的轮廓,所以要用新的木板替换。不过为了环保,可以用一部分旧篱笆切割出长方形的木板充当木料。图(b)表示在(a)形状的篱笆中能切割出的最大长方形。给定构成篱笆的各个木板的高度,编写程序计算能够切割出的最大长方形面积。不能斜线切割,即不允许采用如图(c)的切割方法。 图1 切割篱笆问题暴力算法给出保存各个木板高度的数组h[],截取第l个木板到第r个木板的长方形面积可...原创 2021-07-11 15:40:13 · 1166 阅读 · 3 评论 -
位操作的应用实例(2)位掩码
位掩码(bit mask),说白了是应用位运算来实现一些复杂的操作,利用二进制的1和0来实现。例题1:给定了 32 位整数 N 和 M,如何将 N 的 i 到 j 位(位位置是 1,2,3,…32)设 置 为 和 M 中 相 同 位 的 值 。例 如 , N = 00000000000000000000000001111011,M = 00000000001000000011000000011000, i = 10, j = 20;那么,结果应该是 000000000010000000110000原创 2020-07-19 16:53:21 · 4876 阅读 · 0 评论 -
位操作的应用实例(1)入门篇
位操作的定义所谓的位操作,是指按二进制逐位进行逻辑运算。常见的位运算包括:取反、位与、位或、位异或以及左移、右移。在 C/C++中,基本的位运算符总结如下,其中运算符优先级为从上到下递减,且<<和>>优先级相同,如下表所示:位运算符概览 操作符 功能 用法 ~ 取反 ~var << 左移运算(相当于乘法) var<<pos >> 右移运算(相当于除法) var>>原创 2020-07-06 11:07:24 · 433 阅读 · 0 评论 -
你一定要知道的计算机底层知识
前言虽然在程序员的职业生涯中,计算机底层知识可能很少直接涉及,但并不意味着这部分知识不重要。原创 2020-05-06 21:17:37 · 2284 阅读 · 0 评论 -
C++校招笔试题,BAT内部流出(2)
1.已知两个链表head1和head2各自有序,请把它们合并成一个链表依然有序。(保留所有结点,即便大小相同) 给定链表的结点结构如下:structNode{intdata ;Node*next ;};答案:Node * Merge(Node *head1 , Node *head2){ if ( head1 == NULL) retu...原创 2020-03-14 09:22:04 · 275 阅读 · 0 评论 -
C++校招笔试题,BAT内部流出(1)
1. #include < filename.h >和#include “filename.h” 有什么区别? 答:对于#include < filename.h >,编译器从标准库路径开始搜索filename.h 对于#include “filename.h”,编译器从用户的工作路径开始搜索filename.h2. 在C++ 程序中调用被C 编译器编译后的函数,...原创 2020-03-13 08:44:12 · 275 阅读 · 0 评论 -
C++矩阵运算库推荐
矩阵运算再很多数学算法中经常用到,不懂矩阵,就不算真正理解现代数学。大量现代高级算法都需要用到矩阵运算,根据之前的工作,顺便做了个调查,做一些相关的推荐吧。Armadillo:C++下的Matlab替代品地址:http://arma.sourceforge.net/许可证:MPL 2.0目前使用比较广的C++矩阵运算库之一,是在C++下使用Matlab方式操作矩阵很好的选择,许多M...原创 2020-03-12 13:50:22 · 4662 阅读 · 0 评论 -
VS下 L 和 _T() 指令
1.L指令字符串前面加 L 表示该字符串是Unicode 字符串,可以将ANSI字符串转换成 Unicode 字符串,就是每个字符占两个字节。strlen("abc") = 3;strlen(L"abc") = 6;2.T()或TEXT()宏_T()或者TEXT()宏,可以把你用引号括起来的字符串,根据你的环境选择合适的编码方式:如果定义的时Unicode ,那么 _...原创 2020-03-09 09:03:43 · 1187 阅读 · 0 评论 -
CString和内置类型之间的转换
CString-->float、int、double在MFC中可以采用CString内置的函数Format实现,形式如下CString destination;destination.Format(_T("%??"),source); %c 单个字符 %d 十进制整数(int)...原创 2020-02-08 14:09:56 · 185 阅读 · 0 评论 -
多段线简化算法,看这一篇就够了
本文参考自:https://www.codeproject.com/Articles/114797/Polyline-Simplification前言在计算几何中,经常我们会碰到需要简化输入Polyline的场景。多段线(Polyline)简化算法可以帮助我们减少Polyline的点数,从而降低输入规模。对多段线简化算法,通常的做法是在一定的近似精度下,删除一些点或者边。在计算机图形学中,...原创 2020-02-05 19:17:22 · 5938 阅读 · 0 评论 -
浅谈C++ DLL的编写
引言DLL的概念Basic DLL使用导出函数关键字用def文件创建工程MyDllMFC DLLRegularExtensionMFC Regular DLLMFC Extension DLLDLL的链接方式隐式链接显式链接引言自从微软推出 16 位的 Windows 操作系统起,此后每种版本的 Windows 操作系统都非常依赖于动态链接库 (DLL) 中的函数和数据,实际上原创 2017-05-18 10:27:12 · 594 阅读 · 0 评论 -
C++ 性能剖析
两个性能隐患性能问题不是仅仅用“技术”可以解决的,它往往是架构,测试,假设等综合难题。不过,对于一个工程师来说,必须从小做起,把一些“明显”的小问题解决。否则的话积小成多,千里堤坝,溃于蚁穴。 下面用一例子,来做一下对比,看看一些微妙的细节是如何影响程序性能的。struct intPair{ int ip1; int ip2;原创 2017-05-16 18:20:13 · 655 阅读 · 0 评论 -
程序优化方法
程序优化方法1.代码优化代码优化一般需要与算法优化同步进行,代码优化主要是涉及到具体的编码技巧。同样的算法与功能,不同的写法也可能让程序效率差异巨大。一般而言,代码优化主要是针对循环结构进行分析处理,目前想到的几条原则是:a.避免循环内部的乘(除)法以及冗余计算这一原则是能把运算放在循环外的尽量提出去放在外部,循环内部不必要的乘除法可使用加法来替代等。如下面的例子,灰度图像数据存在BYTE Img[转载 2017-05-04 14:05:16 · 5350 阅读 · 0 评论 -
一文看懂堆和栈的区别
堆和栈的区别堆栈空间分配区别堆栈缓存方式区别可申请大小的区别堆和栈的区别堆栈空间分配区别: 1、栈(操作系统):由操作系统自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈; 2、堆(操作系统): 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收,分配方式倒是类似于链表。堆栈缓存方式区别: 1、栈使用的是一级缓存, 他们通常都是被调用时原创 2017-05-04 13:42:44 · 224 阅读 · 0 评论 -
编译器delete [] 时如何知道数组长度
如何申请和释放一个数组为什么 newdelete new delete 要配对使用如何申请和释放一个数组?我们经常要用到动态分配一个数组,也许是这样的:string *psa = new string[10]; //array of 10 empty stringsint *pia = new int[10]; //array of 10 uninitialize原创 2017-05-12 10:26:53 · 1099 阅读 · 1 评论 -
C++内存分布与虚指针
类成员内存分布我们先来看看编译器是怎么处理类成员内存分布的,特别是在继承、虚函数存在的情况下。工欲善其事,必先利其器,我们先用好Visual Studio工具,像下面这样一步一步来: 先选择左侧的C/C++->命令行,然后在其他选项这里写上/d1 reportAllClassLayout,它可以看到所有相关类的内存布局,如果写上/d1 reportSingleClassLayoutXXX(XXX为原创 2017-05-11 18:28:03 · 283 阅读 · 0 评论