自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Cross

C++/SLAM/算法

  • 博客(65)
  • 资源 (2)
  • 收藏
  • 关注

转载 std::async介绍与实例

C++11中引入了std::async什么是std::asyncstd::async()是一个接受回调(函数或函数对象)作为参数的函数模板,并有可能异步执行它们.template<class Fn, class... Args>future<typename result_of<Fn(Args...)>::type> async(launch poli...

2019-09-05 18:00:48 2301

转载 C++中的RAII介绍

摘要RAII技术被认为是C++中管理资源的最佳方法,进一步引申,使用RAII技术也可以实现安全、简洁的状态管理,编写出优雅的异常安全的代码。资源管理RAII是C++的发明者Bjarne Stroustrup提出的概念,RAII全称是“Resource Acquisition is Initialization”,直译过来是“资源获取即初始化”,也就是说在构造函数中申请分配资源,在析构函...

2019-08-11 22:11:01 458

转载 C++写文件时覆盖与否的问题

ofstream out("/path/to/file");out<<"write to file"<<endl;out.close();使用上述方式,若文件不存在,自动创建新文件并写入“write to file”;若文件存在,会覆盖掉原文件的内容,写入“write to file”。如果希望每次都写入文件末尾,而不覆盖原文件,可采用以下方式:ofstre...

2019-08-01 17:15:23 8735 1

原创 Python中print用法大全(打印字符串,整形和浮点型)

1、打印字符串string="hello" #%s打印时结果是hello print"string=%s"%string#output:string=hello #%2s意思是字符串长度为2,当原字符串的长度超过2时,按原长度打印,所以%2s的打印结果还是hello print"string=%2s"%string#...

2019-07-31 18:33:28 7491

转载 Python中的X[:,0]、X[:,1]、X[:,:,0]、X[:,:,1]、X[:,m:n]和X[:,:,m:n]用法

x[m,n]是通过numpy库引用数组或矩阵中的某一段数据集的一种写法,m代表第m维,n代表m维中取第几段特征数据。通常用法:x[:,n]或者x[n,:]x[:,n]表示在全部数组(维)中取第n个数据,直观来说,x[:,n]就是取所有集合的第n个数据,对于X[:,0];是取二维数组中第一维的所有数据对于X[:,1]是取二维数组中第二维的所有数据对于X[:,m:n...

2019-07-31 16:43:13 1354

转载 在Ubuntu16.04中安装pycharm并打开的两种方法介绍

PyCharm一个是Python集成开发环境,它既提供收费的专业版,也提供免费的社区版本。PyCharm带有一整套可以帮助用户在使用Python语言开发时提高其效率的工具,比如调试、语法高亮、Project管理、代码跳转、自动完成、单元测试等等。PyCharm非常好用,而且是跨平台的,在Windows、Mac、Linux系统中都可使用。尝试使用过其他Python IDE,比如VSC、vim、em...

2019-07-31 16:11:42 1722 1

转载 C++ 11结构体内直接赋初始值

C++11添加了很多新特性,使C++看上去更加的灵活和面向对象,其中对struct的修改也值得关注。  我们知道,以前struct(包括类class,两者概念是差不多的)是杜绝在其体内直接给成员变量赋初始值的,但是现在可以给每个成员变量赋予默认的初始值,如下:struct Student{ char* name = nullptr; unsigned int age =...

2019-07-24 19:18:58 3370

转载 C++中std::sort/std::stable_sort/std::partial_sort的区别及使用

某些算法会重排容器中元素的顺序,如std::sort。调用sort会重排输入序列中的元素,使之有序,它默认是利用元素类型的<运算符来实现排序的。也可以重载sort的默认排序,即通过sort的第三个参数,此参数是一个谓词(predicate)。谓词是一个可调用的表达式,其返回结果是一个能用作条件的值,即返回一个bool类型的值。标准库算法所使用的谓词分为两类:一元谓词(un...

2019-07-24 11:01:26 617

转载 头文件中定义 const 全局变量应注意的问题

我们知道,在 C++(但不是在 C 语言)中,const 限定符对默认存储类型稍有影响。在默认情况下,全局变量的链接性为外部的,但 const 全局变量的链接性为内部的。也就是说,在 C++ 看来,全局 const 定义就像使用了 static 说明符一样。因此,可以将 const 常量定义在头文件中供工程中的多个其它文件包含引用,并且编译时不会产生变量重复定义的错误。当然,也可以用...

2019-07-22 19:49:36 1412

转载 C++中的函数重复定义问题

本人注释:头文件中直接写函数实现会出现重复定义的错误,但是如果是在类中直接写函数实现就不会出现此错误,原因是两个cpp都包含该头文件,相当于头文件中的同一个函数实现被编译了两次,那么就出现了二义性问题,即调用该函数的地方不知道应该使用哪个函数实现.类中写函数实现就没这个问题,因为会被当成inline函数处理.另外,这与函数重载不一样,函数重载由于特征标的存在编译器能够区分调用哪个实现,...

2019-07-22 16:49:30 5100

转载 C++编译遇到重复定义问题

一直对编译这个事情不是太明白,想好好学习一下,今天自己写东西试验,遇到了这么个问题,想请教一下,先贴代码// test.h#ifndef JUST_FOR_TEST_H_#define JUST_FOR_TEST_H_struct Test { static int i; void t();};int Test::i = 0;#endif// test.cpp...

2019-07-22 16:28:57 1280

转载 add_library、target_link_libraries和link_directories

cmake是Linux(这里默认是Ubuntu系统)下常使用的编译C++的工具,而使用cmake就需要先在CmakeLists.txt文件中对编译规则进行。这里介绍常用的三种指令add_library、target_link_libraries和link_directories,该笔记主要参考了cmake官网给的教程,如有需要请访问以下网址:https://cmake.org/cmake/he...

2019-07-22 15:22:13 474

转载 boost::shared_ptr:传值还是传引用?

关于shared_ptrshared_ptr,顾名思义,是共享指针。boost库引入shared_ptr为了实现在C++中通过引用计数对堆对象进行内存管理的一种机制。更多关于shared_ptr的信息,可参考shared_ptr template.一般可以通过以下方式使用shared_ptr:boost::shared_ptr<classa> sp1(new c...

2019-07-22 13:41:47 2278

转载 C++代码重构遵循的原则

在学数据结构的时候,我常有这样目标——写出能够最大程度复用的代码(算法正确,封装优秀)。我常想——如何能在短时间内达成“算法正确,封装优秀”这样的目标。经过一段时间的摸索,我的结论是:先用C写出正确的算法,再将它改写成C++ class,最后再考虑改为template。这种方法简单可行,基本实现了 逻辑(算法)设计与接口设计两个步骤的分离。在写数据结构代码的场景下,使用这种方法的前提是——你必...

2019-07-22 10:29:41 312

转载 cerr和cout的使用

之前一直在用,但就是没在意两者到底有啥却别,今天又想到这个问题,总结下吧(以下的内容均是本人从网上查阅资料看来整理的,暂时还没有查阅官方资料,不保证准确,欢迎讨论)其实大家平常常会用的主要有三个:cout、cerr、clog,首先简单介绍下三者。这三者在C++中都是标准IO库中提供的输出工具(至于有关的重载问题在此不讨论):cout:写到标准输出的ostream对象;cerr:输出...

2019-07-21 23:15:59 1102

转载 ROS创建工作空间

为catkin创建一个工作空间这个教程假设你已经装好了catkin,并且初始化好了环境变量。如果你是通过apt-get来装ROS inidgo,下面的命令是source的命令$ source /opt/ros/indigo/setup.bash创建一个catkin工作空间:$ mkdir -p ~/catkin_ws/src$ cd ~/catkin_ws/src$ cat...

2019-07-21 21:51:05 158

转载 ROS常用命令

1.要找到一个软件包的目录,使用 rospack find命令:rospack find package-name2.查看软件包:要查看软件包目录下的文件,使用如下命令:rosls package-name3.如果想“访问”某软件包目录,可以将当前目录切换至此软件包目录,使用如下命令:roscd package-name4.eog是图像查看器eog box−turtle...

2019-07-21 21:30:25 361

转载 C++代码命名规范

常用命名法有三种:驼峰命名法、匈牙利命名法、帕斯卡命名法。这三种命名方法各有千秋,以庄子的齐物论来说就是“道无终始,物有死生,不恃其成”。我们要“吸百家之长,圆我代码功夫”,废话说了几行了,综合出来的代码规范如下:一、标识符1、简单、合理、准确的英文单词(不要缩写),切忌汉语拼音。(eg:不要把CurrentWidth写出NowWidth)2、不要仅靠大小写区分...

2019-07-21 20:41:03 236

原创 集成学习介绍1—简介

集成学习通过将多个学习器进行结合,常可获得比单一学习器显著优越的泛化性能。用一个简单的例子来进行说明:在一个二分类任务重,假设三个分类器在三个测试样本上的表现如下图所示。假设集成学习的结果通过三个个体学习器用投票发(voting)产生,即“少数服从多数”,那么当三个个体学习器分别对三个测试例有不同的判别优势时,集成的效果也会不一样。 目前集成学习的方法大致可以分成两大类:1...

2018-11-15 20:35:28 290

转载 集成学习介绍3—决策树和随机森林算法

决策树定义分类决策树模型是一种描述对实例进行分类的树形结构。决策树由节点(Node)和有向边(directed edge)组成。节点有两种类型:内部节点(internal node)和叶节点(left node)。内部节点表示一个特征或一个属性,叶节点表示一个类。决策过程用决策树分类,从根节点开始,对实例的某一特征进行测试,根据测试结果,将实例分配到其子节点(每一个子节点对应着特征的一...

2018-11-15 20:24:07 1716

转载 集成学习介绍2—Boosting算法介绍

一、Boosting算法Boosting集成分类器包含多个非常简单的成员分类器,这些成员分类器的性能仅好于随机猜想,常被称为弱学习机。典型的弱学习机的例子就是单层决策树。Boosting算法主要针对难以区分的样本,弱学习机通过在分类错误的样本上进行学习来提高继承分类器的分类性能。Boosting与Bagging不同,在Boosting的初始化阶段采用的是无返回抽样从训练样本中随机抽取一个子集,...

2018-11-15 20:08:54 1110

转载 详解卡尔曼滤波器

 详解卡尔曼滤波原理  在网上看了不少与卡尔曼滤波相关的博客、论文,要么是只谈理论、缺乏感性,或者有感性认识,缺乏理论推导。能兼顾二者的少之又少,直到我看到了国外的一篇博文,真的惊艳到我了,不得不佩服作者这种细致入微的精神,翻译过来跟大家分享一下,原文链接:http://www.bzarg.com/p/how-a-kalman-filter-works-in-pictures/  我不得...

2018-09-28 17:24:43 18556 11

转载 static_cast和dynamic_cast的区别

3.1 static_cast用法:static_cast &lt; type-id &gt; ( exdivssion ) 该运算符把exdivssion转换为type-id类型,但没有运行时类型检查来保证转换的安全性。它主要有如下几种用法:①用于类层次结构中基类和子类之间指针或引用的转换。  进行上行转换(把子类的指针或引用转换成基类表示)是安全的;  进行下行转换(把基类指针或引用...

2018-09-10 10:42:30 23964

转载 在类的成员函数中调用delete this

   在类的成员函数中能不能调用delete this?答案是肯定的,能调用,而且很多老一点的库都有这种代码。假设这个成员函数名字叫release,而delete this就在这个release方法中被调用,那么这个对象在调用release方法后,还能进行其他操作,如调用该对象的其他方法么?答案仍然是肯定的,调用release之后还能调用其他的方法,但是有个前提:被调用的方法不涉及这个对象的数据成...

2018-09-05 16:31:15 221

转载 inline和virtual能够同时修饰吗

在类中定义并实现的成员函数默认为inline(内联)函数,而Inline函数又不能为虚函数,这是两个正确的结论,这位同学的疑惑是这两个正确的结论似乎有些冲突,冲突在哪里,因为我们平时在类中定义并实现的成员函数很多都声明为虚函数,下面看代码:// inline和虚函数冲突吗.cpp : 定义控制台应用程序的入口点。#include "stdafx.h"#include &lt;iostream&gt...

2018-09-05 16:30:58 1262

转载 比较全局变量、全局静态变量、局部变量、局部静态变量的区别

比较全局变量、全局静态变量、局部变量、局部静态变量的区别,他们在编译完后存储位置在什么地方、初始化值在什么地方、内存什么时候分配、赋初值对这些变量有哪些影响等。要弄清楚这些问题,首先要弄清楚下面几个知识点。    C语言分下面几个存储区:    1、栈区(stack) 由编译器在需要的时候自动分配释放,在不需要的时候就自动清除的变量存储区。通常存放的变量是函数的参数值、局部变量的值等,其操...

2018-09-05 16:30:45 881

原创 程序猿的自我修养

最近身体不太好,突然感觉自己需要放松放松。技术的探索是无限的,但是自己的精力却是有限的,有时候确实该停一停,想一想。不知道每天坚持运动是否可以坚持下去,希望自己可以吧~ ...

2018-08-21 21:13:15 132

转载 如何减少频繁分配内存(malloc或者new)造成的内存碎片

 高性能之内存池(频繁使用malloc和new会降低性能)内存池(Memory Pool)是一种内存分配方式。通常我们习惯直接使用new、malloc等API申请分配内存,这样做的缺点在于:由于所申请内存块的大小不定,当频繁使用时会造成大量的内存碎片并进而降低性能。内存池则是在真正使用内存之前,先申请分配一定数量的、大小相等(一般情况下)的内存块留作备用。当有新的内存需求时,就从内存池中分出一...

2018-08-08 10:44:26 14215

转载 malloc内存分配与free内存释放的原理

前段时间一直想看malloc的原理,在搜了好几篇malloc源码后遂放弃,晦涩难懂。  后来室友买了本深入理解计算机系统的书,原来上面有讲malloc的原理,遂看了,先明白理论,在看代码就理解比较快了= =  1.问题的引入:   为什么要使用malloc,主要是因为在代码中,为了节约内存,很多数据都是动态生成的,所以会用malloc,对应于C++中的new,底层还是调用malloc....

2018-07-30 15:18:23 1126

转载 浅议 Dynamic_cast 和 RTTI

写这篇博文的目的是,记录学习过程。对于问题要较真,在解决这个问题中会学到很多,远远超过自己期望,锻炼思维,享受这个过程。问题: Static_cast 与 Dynamic_cast的区别来自书本上的解释:  用 static_cast&lt;type-id &gt; ( expression )  1. static_cast(expression) The static_ca...

2018-07-18 11:23:46 236

转载 memset(this, 0, sizeof *this)

有时候类里面定义了很多int,char,struct等c语言里的那些类型的变量,我习惯在构造函数中将它们初始化为0,但是一句句的写太麻烦,所以直接就memset(this, 0, sizeof *this);将整个对象的内存全部置为0。对于这种情形可以很好的工作,但是下面几种情形是不可以这么使用的:1.类含有虚函数表:这么做会破坏虚函数表,后续对虚函数的调用都将出现异常2.类中含有C++类型的对象...

2018-07-12 09:20:05 824

转载 C++如何实现类对象只能动态分配或只能静态分配

C++中建立类的对象有两种方式: (1)静态建立,例如 A a; 静态建立一个类对象,就是由编译器为对象在栈空间中分配内存。使用这种方法,是直接调用类的构造函数。 (2)动态建立,例如 A* p = new A(); 动态建立一个类对象,就是使用new运算符为对象在堆空间中分配内存。这个过程分为两步:第一步执行operator new( )函数,在堆空间中搜索一块内存并进行...

2018-07-10 19:58:46 793

原创 CUDA编程实战——并行矢量求和

多个并行线程块完成两个矢量的求和:代码如下(使用了10个并行线程块):#include &lt;iostream&gt; #include "book.h"using namespace std;#define N 10__global__ void add(int *a, int *b, int *c) { //blockIdx表示并行线程块的索引 int tid = b...

2018-06-29 15:42:26 348

原创 CUDA编程实战——查询设备

#include "book.h"int main(void) { cudaDeviceProp prop; int count; HANDLE_ERROR(cudaGetDeviceCount(&amp;count)); for (int i = 0; i&lt; count; i++) { HANDLE_ERROR(cudaGetDeviceProperties(&amp;...

2018-06-29 14:32:55 207

原创 CUDA编程实战——第一个程序

#include &lt;iostream&gt; #include "book.h"using namespace std;//__global__修饰符告诉编译器这个函数应编译为在设备上运行(而不是主机)__global__ void add(int a, int b, int *c){ *c = a + b;}int main(){ int c; int *de...

2018-06-29 14:21:13 674

转载 VS2013 CUDA8.0 第一个CUDA程序

今晚在看《GPU高性能运算之CUDA》时,看到书中的例子,就想写个CUDA程序练练手,可是之前写的CUDA工程都是在Nsight Eclipse Edition写的,现在想用VS写个CUDA程序,突然不知道该怎么下手,上网查了一些资料,整理在此,方便日后查看,首先本文部分内容参考了博客: vs2013下编写你的第一个CUDA程序,作者写的很详细,我基本就是按照他的步骤来的。1.上一篇博客写了VS1...

2018-06-29 13:43:42 2262 3

原创 std::shared_ptr 和 std::weak_ptr引用计数的循环引用问题

shared维护了一个指向control block的指针,control block内部包含了智能指针对象的引用个数。weak_ptr 是一种不控制对象生命周期的智能指针, 它指向一个 shared_ptr 管理的对象. 进行该对象的内存管理的是那个强引用的 shared_ptr. weak_ptr只是提供了对管理对象的一个访问手段.   weak_ptr 设计的目的是为配合 shared_pt...

2018-06-28 16:52:06 1167

转载 关于BSS段的大小

1.BSS段中的内容先明确 BSS 段“存放”的是未初始化的全局变量与局部静态变量,此处指的存放是指为其预留空间(占位符)。但BSS段在磁盘上不是真的占用变量大小的空间,它仅是在该段中记录了所有未初始化全局变量与局部静态变量的大小总和,至于每个变量的大小则存储在符号表的size属性中。即:BSS段内容:无内容,它将在段表中占一个段描述符,该段描述符的size属性将记录未初始化的全局变量与局部静态变...

2018-06-28 16:11:00 1058

转载 C/C++编译和链接过程详解 (重定向表,导出符号表,未解决符号表)

详解link 有 些人写C/C++(以下假定为C++)程序,对unresolved external link或者duplicated external simbol的错误信息不知所措(因为这样的错误信息不能定位到某一行)。或者对语言的一些部分不知道为什么要(或者不要)这样那样设计。了解本文之后, 或许会有一些答案。     首先看看我们是如何写一个程序的。如果你在使用某种IDE(Visual S...

2018-06-28 14:50:15 508

转载 强类型,弱类型,静态类型,动态类型的区别

类型系统的一些概念,众说纷纭,使用上也比较乱。有些东西,甚至不好严格定义。以下算学术界的一种相对“严格”的说法。 首先了解一下基本概念Program Errorstrapped errors。导致程序终止执行,如除0,Java中数组越界访问untrapped errors。 出错后继续执行,但可能出现任意行为。如C里的缓冲区溢出、Jump到错误地址Forbidden Behaviours语言设计时...

2018-06-28 14:14:57 169

GPU高性能编程CUDA实战-代码

GPU高性能编程CUDA实战-代码,包含书中所有代码,提供book.h文件~

2018-06-29

基于51的时钟设计1602液晶

基于51的时钟设计,1602液晶显示,还有许多不足的地方,,

2013-10-11

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除