![](https://img-blog.csdnimg.cn/20201014180756918.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C/C++
shaozhenghan
GitHub: https://github.com/shaozhenghan
展开
-
C++ 中数据类型转换的方法
用stringstream例如:要注意的是,如果stringstream 放在循环里面需要每次改变值,每次进入循环前要使用clear()方法。否则如果ss的定义放在外面,则ss 每次都添加10。导致不想要的结果。若每次进入循环重新定义,则耗费CPU周期:在多次转换中重复使用同一个stringstream(而不是每次都创建一个新的对象)对象最大的好处在于效率。stringstream对象...原创 2018-07-25 03:05:54 · 271 阅读 · 0 评论 -
对比:C语言数组与C++vector容器
有空整理。原创 2018-08-05 17:40:20 · 288 阅读 · 0 评论 -
(转)检查 NaN 数据值 (C/C++/Python 实现)
https://www.cnblogs.com/klchang/p/9029658.html转载 2018-08-09 19:54:41 · 298 阅读 · 0 评论 -
哈佛大学公开课:计算机科学cs50 学习笔记及代码实现(第9集:归并排序)
用递归算法实现归并排序伪代码如下:if n < 2 return;else sort left half of elements; sort right half of elements; merge sorted halves; 例子:4,2,6,8,1,3,7,5 从小到大排序n < 2? nosort l...原创 2018-07-31 01:41:48 · 405 阅读 · 0 评论 -
C++11 标准特性:指向数组首元素和尾后元素的指针(附归并排序代码)
数组是以指针形式传递给函数的,所以函数一开始并不知道数组的确切尺寸,所以应该提供一些额外的信息。C++中常用方法有两种:1. 显示地传递一个表示数组大小的形参,这也是C语言和C++11标准之前常用的; 2. 在C++11标准中,可以传递指向数组首元素和尾后元素的指针,下面的代码我用了这种方法。这类似于容器类型的迭代器,但因为数组不是类类型,所以这两个函数不是成员函数,使用方法为:int * b...原创 2018-08-06 01:41:46 · 1871 阅读 · 0 评论 -
数据结构(一):入门
今天开始补数据结构。其实以前也学过,都忘了,今天开始一点点补回来。1. 什么是数据结构数据结构由数据和结构组成,它是一门研究非数值计算的程序设计问题中计算机的操作对象以及它们之间的关系和操作等的学科,数据结构是数据存储的方式。2. 什么是算法算法是处理数据的方法,通常我们通过分析算法的时间复杂度和空间复杂度来判断它的好坏。数据结构的不同就会导致算法的不同,数据结构的选择对算法效率会...原创 2018-08-15 02:40:20 · 2988 阅读 · 0 评论 -
(转)Linux 下 GDB调试工具的使用
https://www.cnblogs.com/life2refuel/p/5396538.htmlhttps://blog.csdn.net/Z_Dream_ST/article/details/77840733转载 2018-08-03 02:31:07 · 229 阅读 · 0 评论 -
(转)学习CMake / CMakeLists.txt
https://blog.csdn.net/yangguanghaozi/article/details/53392732https://www.cnblogs.com/qixianyu/p/6574048.htmlhttps://blog.csdn.net/michaelhan3/article/details/69525207转载 2018-08-12 18:28:18 · 200 阅读 · 0 评论 -
哈佛大学公开课:计算机科学cs50 学习笔记及代码练习(第14集:栈,队列,哈希表,树)
周末写代码--------------------------------2018.8.7---------------------------1. stack 栈stack 后进先出(LIFO)结构。下面用数组实现栈,用malloc使栈的容量可扩展。stack.c这里要特别注意:(1) Destroy()函数中,free(s->data); 以及 s->dat...原创 2018-08-08 03:07:30 · 949 阅读 · 0 评论 -
哈佛大学公开课:计算机科学cs50 学习笔记及代码练习(第8集:冒泡,选择排序,递归)
0. 前言 这门课讲的排序相当清楚,老师用很容易懂的方式讲原理,代码部分在linux下写,用gdb调试,这才是编程的学习方法。记得以前国内本科也学过,但根本没讲清楚。现在研究生又听这门公开课,发现把原理说清楚之后,代码自己很容易就实现了。另外gdb调试工具也很好用很重要,但国内学的时候老师甚至没有提过。1. gdb 调试工具的用法几个命令:run,break, continue, ...原创 2018-07-30 02:19:12 · 2478 阅读 · 0 评论 -
哈佛大学公开课:计算机科学cs50 学习笔记(第6集:C语言,RAM)
1. 关于变量对内存的使用#include <stdio.h>void swap(int, int);int main(void){ int x = 1; int y = 2; swap(x, y); printf("x=%i\n", x); printf("y=%i\n", y); return 0;}void swap(int a, int b)...原创 2018-07-28 02:33:21 · 1036 阅读 · 0 评论 -
C++ 指针与引用、指向常量的指针、常量指针、常量引用做函数形参
0. 指针与引用指针是对象,即在内存中占有实际内存。而引用只是一个对象的别名,本身不占有实际内存,不是对象。所以指针本身也可以是常量,指针也可以指向常量,下面区分一下。1. 指向常量的指针(pointer to const)指向常量的指针不能用于改变所指对象的值。const double pi = 3.14;const double *cptr = &pi; // 正...原创 2018-08-04 23:07:31 · 1323 阅读 · 0 评论 -
C++ 与 Python 的接口:Cython的初次使用要点总结
我在用机器学习/深度学习对点云进行分类时,需要对原始点云数据进行增强(Data Aumentation),但原始点云数据为PCD文件,我后续还要用PCL点云库(C++)进行特征提取等操作,因此就想在C++中进行。数据增强的代码当然也可以用C++写,但想学习用一下Cython接口就用了Python(当然Python写起来也简单==)。。。 这部分代码详见我的这篇博客: https://blog.cs...原创 2018-07-28 19:00:47 · 4571 阅读 · 3 评论 -
主成份分析(PCA)基本原理/步骤及其C++ 实现与优化(结合Eigen矩阵库)
主成份分析是常用的降维方法,其他降维方法还有线性判别分析LDA,二者的区别见:https://www.cnblogs.com/pinard/p/6244265.html 简要说就是:1.PCA将原始数据投影到方差最大的方向,LDA将数据投影到不同样本的中心点距离最大的方向。2. PCA是无监督降维,LDA是有监督降维。3. 若分类主要依赖均值而非方差,则LDA效果好,反之PCA效果...原创 2018-07-29 20:37:29 · 2400 阅读 · 3 评论 -
(转)GCC编译过程
https://www.cnblogs.com/king-lps/p/7757919.html转载 2018-07-26 16:54:20 · 111 阅读 · 0 评论 -
哈佛大学公开课:计算机科学cs50 学习笔记(第4~5集:C语言,编译器)
1. fflush()函数此函数包含在stdio.h头文件中,用来强制将缓冲区中的内容写入文件。函数原型:int fflush(FILE *stream) ;函数功能:清除一个流,即清除文件缓冲区,当文件以写方式打开时,将缓冲区内容写入文件。也就是说,对于ANSI C规定的是缓冲文件系统,函数fflush用于将缓冲区的内容输出到文件中去。函数返回值:如果成功刷新,fflush返回0。指定...原创 2018-07-27 02:12:15 · 1086 阅读 · 0 评论 -
哈佛大学公开课:计算机科学cs50 学习笔记(第12集:单链表,内存分配)
1. 数组的优缺点数组元素是连续的存储在有限的内存里,这样有两个缺点:--数组的大小是有限的。如果需要给数组的内存(缓冲区buffer)扩容,需要调用realloc()函数。realloc()的工作原理:在内部调用malloc()来分配一块新的内存,然后用循环将原先内存的内容拷贝到新内存,然后free()掉原来的内存,返回新内存的地址。--不方便进行元素的插入与删除。因为元素连续存储,...原创 2018-08-04 03:57:57 · 880 阅读 · 0 评论 -
==运算符重载 (operator overload) 时几个报错的解决方法
第一次学习用C++ 的运算符重载,记录一下报错的解决方法以及改进过程。针对vector容器,有一个判断给定元素是否在vector中的函数:std::find(vec.cbegin(), vec.cend(), element);但这个函数只能用在vector元素为内置类型的时候,如果vector 元素类型为类或者结构体,则需要在类或者结构体中重载 == 运算符。version1:报错 ...原创 2018-08-04 21:26:51 · 3460 阅读 · 0 评论 -
(转)C++ new和malloc的区别
转:经典面试题之new和malloc的区别:https://blog.csdn.net/nie19940803/article/details/76358673 new和malloc的区别是C/C++一道经典的面试题,我也遇到过几次,回答的都不是很好,今天特意整理了一下。0. 属性new/delete是C++关键字,需要编译器支持。malloc/free是库函数,需要头...转载 2018-08-04 21:55:35 · 136 阅读 · 0 评论 -
关于C++ 的常量成员函数(const member function)
见我这篇博客:https://blog.csdn.net/shaozhenghan/article/details/81415322 , 中间有提到。这里单独放到一篇博客里,有助于后面查找复习。原创 2018-08-04 22:46:51 · 964 阅读 · 0 评论 -
数据结构(二):线性结构之线性表
数据结构中的逻辑结构分为线性结构和非线性结构,线性结构是n个数据元素的有序(次序)集合,它有下列几个特征:1.集合中必存在唯一的一个"第一个元素"; 2.集合中必存在唯一的一个"最后的元素"; 3.除最后元素之外,其它数据元素均有唯一的"后继"; 4.除第一元素之外,其它数据元素均有唯一的"前驱"。其中线性表是最常用且最简单的一种线性数据结构。线性表是一个含有n≥0个结点的有限序列...原创 2018-08-16 01:55:04 · 273 阅读 · 0 评论