C++
白码思
Action! Action! Action!
Thinking! Thinking! Thinking!
Repeat above!
展开
-
结构体中的内存对齐
字节对齐原创 2023-02-02 20:59:32 · 110 阅读 · 0 评论 -
C++静态成员和静态函数(非类)
static变量的学习和应用原创 2023-01-17 17:00:21 · 158 阅读 · 0 评论 -
代码的常见错误记录
1. 倒序遍历的错误for(size_t i=100; i>=0; i--)如果这么实现的话会有问题, i=0的时候,程序还会继续, 而i定义的是size_t, 是不能有负数的,所以就溢出了,即使是int类型, 也不行,因为这样遍历的次数是101次了, 而且i为负数,作为索引肯定是不对的2. size_t 类型参与运算一定注意,最好先转成int size_t a = 3; if (a - 4 > 0) { cout << "pass" << e原创 2022-04-14 00:52:11 · 219 阅读 · 0 评论 -
C/C++里的可变参数宏__VA_ARGS__以及常用的预定义的宏
原创 2022-03-09 22:43:16 · 1073 阅读 · 0 评论 -
设置vscode用Cmake进行编译
需要设置两个文件: tasks.json 和 launch.jsontask 文件(terminal ->config task)是设置编译器的参数设置launch 文件(Debug -> add configuration)是负责调试相关参数设置例子文件如下:launch.json{ // Use IntelliSense to learn about possible attributes. // Hover to view descript...原创 2020-11-18 00:40:39 · 2489 阅读 · 0 评论 -
纯c语言指针数据保存csv数据
inline void save_csv(const char* filename, const int16_t* img, int width, int height){ FILE *sp; fopen_s(&sp,filename, "w"); for (int i = 0; i < height; i++) { for (int j = 0; j < width-1; j++) { .原创 2020-10-19 20:31:06 · 724 阅读 · 0 评论 -
如何在Cmakelist.txt 添加option,选择编译的内容
option(Afunction_ON"Build library with scattering compensation" ON)if(Afunction_ON) add_definitions(-DAfunction_ON)endif()set(Complier_files ${path}/src/XXX.cpp)if (Afunction_ON) list(APPEND iu456_datapath_processor_SOURCES ${CMAKE...原创 2020-09-25 17:25:42 · 3587 阅读 · 1 评论 -
float型和double数据类型的计算误差
今晚刚解决一个bug,本以为是float和double数据类型导致的误差,结果发现,两种数据结构并不会带来多大的影响注意一个优先级的问题C++里面(int)a×10和(int)(a*10)是不一样的,因为括号的优先级不一样今天debug的经验是不要光想,一定要dump数据分析,数据是不会骗人的,但是人的思维会骗人...原创 2020-09-13 01:43:02 · 392 阅读 · 0 评论 -
如何讲Vector数据写入到csv文件中
最近项目要dump矩阵数据,直接贴一下代码: 供学习参考导出inline void save_csv(std::vector<int16_t> I, std::vector<int16_t> Q, int test_no) { std::ofstream open_file_I; std::ofstream open_file_Q; std::stringstream ss; std::string no; ss << test_no...原创 2020-09-08 19:55:30 · 1820 阅读 · 0 评论 -
Effective C++ 条款14
谨慎考虑资源管理类的拷贝行为有些对象是不能够被拷贝的,那么就需要禁止拷贝,禁止拷贝的方法:Item 6 解释了如何做到这一点。声明拷贝操作为私有。对于 Lock,看起来也许像这样:class Lock: private Uncopyable { // prohibit copying — seepublic: ...原创 2019-04-04 15:43:13 · 202 阅读 · 0 评论 -
Effective C++ 条款15
在资源管理类中准备访问裸资源(就是直接访问内存数据) API 经常需要访问裸资源,所以每一个 RAII 类都应该提供取得它所管理的资源的方法。 访问可以通过显式转换或者隐式转换进行。通常,显式转换更安全,而隐式转换对客户来说更方便。 ...原创 2019-04-04 16:02:17 · 210 阅读 · 0 评论 -
Effective C++ 条款13
使用对象管理资源在利用对象指针的时候,最后需要删除对象指针,实现内存释放,但是有可能在最后的时候,coder忘记释放了。void f(){ Investment *pInv = createInvestment(); // call factory function ... /...原创 2019-04-02 16:20:01 · 166 阅读 · 0 评论 -
google编程规范之命名规则
7. 命名约定最重要的一致性规则是命名管理. 命名的风格能让我们在不需要去查找类型声明的条件下快速地了解某个名字代表的含义: 类型, 变量, 函数, 常量, 宏, 等等, 甚至. 我们大脑中的模式匹配引擎非常依赖这些命名规则.命名规则具有一定随意性, 但相比按个人喜好命名, 一致性更重要, 所以无论你认为它们是否重要, 规则总归是规则.7.1. 通用命名规则总述函数命名, 变量...转载 2019-04-02 17:00:39 · 661 阅读 · 0 评论 -
char和int转换
char和int的转换有两种方式最简单的方法就是利用ASSCII码的差值,直接用char的值减去‘0’就行了eg:char a = '9';int a_ = a-'0';或者就用atof函数,直接将char转成float,float再转成intchar b = '3';int B = atoi(b);int b_ = static_cast<int>(at...原创 2019-04-24 18:14:14 · 10383 阅读 · 0 评论 -
lamda表达式的总结
以前只会用,现在总结一下。lamda表达式可以理解为匿名函数的实现方式。Lambda表达式完整的声明格式如下:[capture list] (params list) mutable exception-> return type { function body }项具体含义如下capture list:捕获外部变量列表 params list:形参列表 muta...原创 2019-04-25 15:34:15 · 386 阅读 · 0 评论 -
C++ 多线程入门(C++11)
多线程并发一直是我想了解的东西,现在也算入门了,写一下我的总结。这是我写的一个简单的code,下面贴一下运行结果,看完大致入门多线程:#include <thread>#include <iostream>#include <vector>#include<unistd.h>using namespace std;class...原创 2019-04-25 15:52:43 · 486 阅读 · 0 评论 -
leetcode刷题Merge Two Sorted Lists
Merge two sorted linked lists and return it as a new list. The new list should be made by splicing together the nodes of the first two lists.Example:Input: 1->2->4, 1->3->4Output: 1-...原创 2019-06-14 15:27:05 · 135 阅读 · 0 评论 -
Effective C++ 条款03
尽可能使用const1.const和指针如果const关键字在星号左边,表示被指物是常量; const T* t如果出现在星号右边,表示指针自身是常量; T* const t如果出现在星号两边,表示被指物和指针两者都是常量;const T* const t总结:const靠近*号,那么申明的指针就是常量。远离*的const就是描述指针的所指量为常量2.const和迭代器...原创 2019-03-19 18:00:54 · 157 阅读 · 0 评论 -
Effective C++ 条款02
先写条款3原创 2019-03-19 15:35:32 · 217 阅读 · 0 评论 -
关于函数accumulate
这个累和的函数一定要注意两点:1.这个函数在std里面和opencv里面都有,所以再用的时候,一定需要加上namespace,std::int product = std::accumulate(v.begin(), v.end(), 0);2.最后一个值0或者0.0决定了返回的数据类型,注意同时这个函数还有将字符串连起来的功能string sum = std::accumu...原创 2018-09-14 10:58:44 · 534 阅读 · 0 评论 -
lamda数据对(pair)排序
typedef std::pair<int, double> PAIR_IF;void CargoPre::SortWithIndex(std::vector <PAIR_IF > &vc, int mode){ switch(mode) { case 0: /////0 for ording data with first...原创 2018-09-26 20:54:07 · 546 阅读 · 0 评论 -
C++的友元函数
类的友元函数申明在类内部,定义在外部。(怎么记得好像有一个东西也是这么玩的,好吧,原来是静态变量和静态函数,不过不同的是,静态的东西,它们还是属于这个类的,而且定义静态成员的时候是要加作用范围),它实际上是可以理解为是插入类内部的一个间谍,可以获取类内部的protected和private的信息,emmm,难怪好多人不建议用它,说是破坏了C++的封装性。尽管友元是在类里面申明的,但是它并不是类...原创 2018-11-09 12:01:34 · 226 阅读 · 0 评论 -
如何安装opencv的contrib(xfeature等)
不知道从3.x开始,opencv就已经不支持免费用一些库了,比如sift,surf这些,因为我最近需要用到,就装了一下,github上有源码,但是安装的时候我出现了很多问题,现在总结一下,方便大家安装。首先从https://github.com/opencv/opencv_contrib这里clone下下来源码。然后运行cmake-gui,这个可视化,比较方便。将extra-什么第三方库的...原创 2018-11-02 10:37:53 · 2787 阅读 · 5 评论 -
C++创建链表
创建链表写过无数次,但是每次写都要思考,索性总结一个固定的模板,要用直接拿过来就行。链表的原理这里就不说了,我主要给了一个例子讲解一下链表的创建,比较简单易懂的例子,变形的话以后有空再更。以下函数的功能主要是将一个数组转为一链表:#include <iostream>using namespace std;//////链表的节点创建,创建一个节点/////////s...原创 2018-11-07 15:30:56 · 1368 阅读 · 0 评论 -
C++静态成员和静态函数(类)
C++类的静态成员变量是需要初始化的,实际上不是为了初始化而初始化,本质上是要定义,分配内存。需要在类的外部进行定义。静态成员变量:静态成员变量和常用的全局变量比较类似。先看一个头文件animal.h#ifndef DUOTAIJINGTAI_ANIMAL_H#define DUOTAIJINGTAI_ANIMAL_H#include <string>cla...原创 2018-11-08 16:45:47 · 619 阅读 · 0 评论 -
关于C++的变量初始化
构造函数的初始化,不要写成函数的形式,比如const类型的数据是无法通过:construct(int a){p1= a;p2 =a; //const 不能直接赋值初始化p3 =p1; //p3没有被初始化}int p1;const int p2;int &p3;需要通过初始化列表construct(int a):p1(a),p2(a),p3(p1){...原创 2018-11-08 17:13:15 · 810 阅读 · 0 评论 -
C++的中的继承,多态和虚函数
首先继承,多态,虚函数,我们先了解一下各位的关系。继承是子类继承父类,完成基础功能的获取,当然继承有三种权限,public,protect和private,如果不加权限限定,默认继承是私有继承。权限表如下:所以可以看到凡私有成员,子类都不能用,不过有方法能用,这里不讨论。多态:实际上就是通过继承实现的,函数的多态性是指一个函数被定义成多个不同参数的函数。当你调用这个函数时,就会...原创 2018-11-08 20:02:16 · 215 阅读 · 0 评论 -
vector初始化
vector 初始化内存方法1:vector<int> v2(10); //初始化size为10可以避免数组动态增长的时候不断的分配内存vector<int> v2,v2.reserve(10);方法2:v1[10] ={0,1,0,0,3,0,0,4,4,4};vector<int> v3(&v1[0],&v1[9]);...原创 2018-11-30 20:10:21 · 156 阅读 · 0 评论 -
Linux下的精确计时函数
std::chrono::high_resolution_clock::time_point tnow = std::chrono::high_resolution_clock::now();std::chrono::high_resolution_clock::time_point tpost = std::chrono::high_resolution_clock::now();std:...原创 2018-12-19 14:47:00 · 1314 阅读 · 0 评论 -
C++的list和vector的区别
C++ vector和list的区别1.vector数据结构vector和数组类似,拥有一段连续的内存空间,并且起始地址不变。因此能高效的进行随机存取,时间复杂度为o(1);但因为内存空间是连续的,所以在进行插入和删除操作时,会造成内存块的拷贝,时间复杂度为o(n)。另外,当数组中内存空间不够时,会重新申请一块内存空间并进行内存拷贝。2.list数据结构list是由双向链表实现的...转载 2019-02-22 17:52:08 · 380 阅读 · 0 评论 -
Effective C++ 条款01
C++为一个语言联邦C++并不是一个带有一组守则的一体语言,它是由四个次语言组成的联邦政府1. C语言C++是以C为基础的。区块,语句,预处理器,内置数据类型,数组,指针等都来自C语言。但C语言没有模板,没有异常,没有重载……2.Objective-Oriented C++包含有构造函数,析构函数,封装,继承,多态,虚函数(动态绑定)等等3.Template C++...原创 2019-03-19 15:12:38 · 118 阅读 · 0 评论 -
C++文本读取和写入
#include <fstream> ofstream //文件写操作 内存写入存储设备 ifstream //文件读操作,存储设备读区到内存中 fstream //读写操作,对打开的文件可进行读写操作 这个是写入void SaveReuslt(char* pathName,std::vector <d...原创 2018-09-10 13:45:14 · 277 阅读 · 0 评论