自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(24)
  • 收藏
  • 关注

原创 盘点国内优秀的机器人公司

机器人的概念比较宽泛,根据具体产品可以分为三个大类:机械臂,移动底盘,智能感知,下面分别进行介绍。机械臂机械臂又可以分为两类:工业机器人和协作机器人。工业机器人以传统四大家族为代表:瑞士ABB,德国KUKA(已被美的控股),日本FANUC和日本川崎。该领域以高精度伺服电机、高精度减速机、高精度控制系统形成深厚的行业壁垒,每个方向都能养活一个实验室。这些外企在国内都有分部,大多是售后工程师、类似...

2020-04-30 11:43:29 1739 2

原创 C++ 学习路线:快速入门到进阶

C/C++ 是一门底层、细粒度、功能强大、学习曲线陡峭的语言,掌握这门语言的程序员通常有着更长的生命周期以及更深的护城河。但入门门槛高也是不争的事实,这篇文章把C++学习划分为入门、进阶、深入三个阶段,每步提供相应的学习方法和资源,帮助大家更好地掌握这门语言。

2020-04-10 10:57:35 3352 2

原创 尽量使用 const

1. 想要绕过编译器 const 检查时,对成员变量增加 mutable 修饰2. 常量函数的返回值(特别是引用和指针)一定要加 const 修饰

2022-06-27 08:15:21 46

原创 在命令行查询 C++ 用法

不知道大家有没有同样的经历,在搬砖酣畅淋漓的时候,每一次切屏都是对思路的严重干扰,特别是切了好几屏都找不到浏览器的时候,简直要爆炸。巧的是,GitHub 网友 aitjcize 也有同样的困扰,于是他开发了一个项目 cppman,可以直接在命令行查看 C++ 相关的头文件和用法,就像下面这样,如同 man 一样的操作,简直不要太方便。Ubuntu 下安装sudo apt install cppman查询想要的功能,会默认从 cplusplus.com 拉取最新的内容cppman std::ve

2022-05-13 23:32:09 213

原创 C++为什么会有“友元”这种破坏封装的设计

最近有朋友问了一个问题:C++里的“友元”破坏了封装,让类外的成员能够访问类的私有成员,不是与面向对象的设计思想相违背吗?首先我们来温习一下什么是友元,如下面代码所示,声明 类Bar 为 类FooB 的友元,那么 Bar 可以访问类 FooB 的私有成员,但 FooA 的私有成员是无法被 Bar 访问到的,编译会报错class Bar;class FooA { public: private: int data_;};class FooB { public: f

2022-05-07 22:56:58 70

原创 避免写错 ”==“ 的小技巧

大家可以先看看下面这段代码有什么问题int max = 10;int i = 0;while(true) { i++; print("%i\n", i); if(i = 10) { break; }}这段代码期望打印 1~10 的数字,但可以达到预期吗?实际运行一下就会发现,它打印完 1 就直接退出了,这是为什么呢?因为错误把 “==” 写成了 “=”,导致程序在运行到第一个循环时,就直接 break 退出了。通过把常量放在 “=” 前面,可以

2021-10-23 17:46:14 63 1

原创 PyTorch 到底香在哪儿

几年前有这样一种声音:“学术界用 PyTorch,工业界用 TensorFlow”,意思是PyTorch 不过是个玩具,无法提供 TensorFlow 所具备的精细化操作。然而发展至今日,如果还有人只把 PyTorch 当成一个新秀,试图在 TensorFlow 主导的机器学习世界里划出一片自己的地盘。那么数据可以证明,这种想法已经过时。事实上,PyTorch 无论在学术界还是在工业界,都已经霸占了半壁江山。从学术界来看,2019 年之前,TensorFlow 还是各大顶会论文选择的主流框架,而 2019

2021-10-23 17:41:43 117 1

原创 C++ 的 traits 技术到底是什么?

C++ 的 traits 技术,是一种约定俗称的技术方案,用来为同一类数据(包括自定义数据类型和内置数据类型)提供统一的类型名(traits),这样可以统一的操作函数,例如 advance(), swap(), encode()/decode() 等。问题描述首先来看 traits 技术可以解决什么问题,我们拥有自定义类型Foo, Bar,以及编译器自带类型 int, double, string,我们想要为这些不同的类型提供统一的编码函数 decode() ,该怎样实现呢?解决方案方案一:函数重

2021-09-26 21:14:31 320 1

原创 C++小技巧:绝对不要显式调用局部变量的析构函数

今天遇到一个bug,记录一下,简而言之就是:绝对不要显式调用局部变量的析构函数。为什么呢,下面详细介绍一下首先来看下面一段代码,可以不看结果,先想一下输出结果是什么?#include <stdio.h>class Mocker{public: Mocker(const int size):size_(size){ printf("Construct Mocker\n"); } ~Mocker(){ printf("Deconstruct %d\n", siz

2021-01-20 21:58:04 202

原创 C++惯用法 RAII (下):常见应用-智能指针和范围锁(Coped Lock)

点击链接学习C++ 优化技巧 :Effective C++上篇文章介绍了 RAII,这篇文章介绍下RAII的常见应用:智能指针和范围锁(Scoped Lock),这两者都利用了RAII的思想来管理资源,将程序员从繁琐又容易出错的资源管理中释放出来,大大降低了程序出错的概率。本文以 C++11 为例对这两者的应用进行简单介绍,同理其它扩展库 Boost 和 Abseil-Cpp 的用法也类似。智能指针智能指针主要来管理动态申请的指针,传统的内存管理需要开发者手动申请和释放内存,而智能指针采用了 RA

2021-01-15 23:15:15 315 1

原创 C++惯用法RAII(上): 最好用的资源管理编程方案

点击链接查看更多C++ 技巧 :Effective C++RAII(Resource Aquisition Is Initialization,翻译过来就是“资源获取即初始化”),是C++之父 Bjarne Stroustrup 提出的一种编程用例,也是目前最好的资源管理方案。为什么说是最好,我们需要先了解一下传统的资源管理有哪些?传统的资源管理主要有两种:以C/C++为首的malloc/new 方法,由程序员手动管理资源,资源保存在堆上以Java为首的垃圾回收机制(Garbage Collec

2021-01-03 23:16:59 103 1

原创 C++ 小知识:const 和 constexpr

太长不看版:constexpr 表示常量,告诉编译器这个变量可以尽情优化const 表示该变量是只读下面正文开始,在介绍 const 和 constexpr 的区别之前,请允许我卖个关子,介绍一下编译器对常量的优化,先看下面一段简单的除法例程int main(){ const int a = 123; int b = 3; float c = b/a;}经过编译器优化生成的汇编代码如下main: push rbp mov

2020-07-22 01:22:13 202

原创 尽量使用 inline enum const 代替#define

点击链接学习C++ 优化技巧 :Effective C++使用#define 定义常量和内联函数,是 C 语言的风格,但宏定义的滥用会给调试带来不必要的麻烦, 而 C++ 提供了许多关键字来满足这些需求,我们一定要利用好它。要清楚的认识这一点,就需要清楚地理解 #define。在程序编译的过程中讲到,#define 被称为预处理器,所有宏定义在编译前都会被替换,一旦出现编译错误不会有任何关于宏的提示,给调试带来很大不便。因此,尽可能使用 const enum 等关键字代替 #define关注以下两点

2020-07-17 00:22:57 174

原创 C++ 程序编译的过程

点击链接学习更多C++ 技巧 :C++ 学习路线C++ 程序的编译分为:预处理、编译、链接 三个步骤,下面依次进行介绍预处理:替换 #define相信大家比较容易看懂下面的代码,已知半径 r 计算圆的面积#define PI 3.141592653// 已知半径 r 计算圆的面积float area(float r){ return r * r * PI;}预处理器会替换所有的宏定义,并删除所有的注释,上面代码中的 PI 都被替换为了 3.141592653,交给编译器的将是下面这样的

2020-07-17 00:08:00 138

原创 如果不想用编译器自动生成的函数,就明确拒绝

点击链接查看更多C++ 技巧 :Effective C++在上一篇文章 C++编译器默默编写了哪些函数 中,我们了解到C++编译器默认生成了构造函数,析构函数,复制构造函数,赋值操作符 这四个函数。当你不需要这些函数的时候,就应该明确拒绝。比如单例模式中,我们设计的类是不允许复制和赋值的,那么就可以像下面这样写:// C++11 写法class Temp {public: Temp(); // 构造函数 ~Temp();

2020-07-15 15:07:34 127

原创 C++编译器默默编写了哪些函数

当编写一个类时,即时没有声明,C++编译器也会默认生成四个函数:构造函数,析构函数,复制构造函数,赋值操作符,如下:class Temp { Temp(); // 构造函数 ~Temp(); // 析构函数 Temp Temp(Temp& temp); // 复制构造函数 Temp &operator=(Temp& temp); // 赋值操作符}...

2020-05-21 17:32:58 124

原创 贝叶斯滤波:卡尔曼滤波、直方图滤波、粒子滤波

卡尔曼滤波、粒子滤波、直方图滤波是贝叶斯滤波的三种实现形式,在《概率机器人》这本书中,按照“线性→非线性”的顺序讲解,先介绍卡尔曼滤波,再介绍直方图滤波和粒子滤波。但我发现先介绍直方图滤波效果可能会比较好,因为直方图滤波是贝叶斯滤波最直观的实现方案,读者可以很方便地从贝叶斯滤波的离散形式直接推出简单直方图滤波。掌握贝叶斯滤波的一般形式后,再学习高斯噪声假设下的卡尔曼滤波,掌握起来会比较轻松。遵循“一般→特殊”的规律...

2020-05-20 08:46:41 853

原创 C++ 是一个语言联邦

C++ 是一个强大的编程语言,但他的风格并不统一,这是由于C++是一个语言联邦,由以下四部分组成,每部分都有自己的特点。C语言:面向对象的C++:包括类,类的派生和继承模板元编程的C++:模板元编程是图灵完全的语言,也有自己的风格特点STL库:STL是官方提供的标准库C 语言C++ 最早就是 C 语言的预编译器,兼容了C语言的所有特性,然而C语言的类型转换不够安全,C++中做了安全...

2020-04-20 15:08:32 186

原创 为什么基类的析构函数是虚函数

考虑以下继承结构,派生类 Derived 中申请了一块内存,使用指针 i_ptr_管理,并在析构的时候释放掉。class Base{ //基类...}class Derived : public Base{ //派生类public:Derived(){i_ptr_ = new int;}~Derived(){delete i_ptr_;}private:int* i_ptr_ =...

2020-04-15 10:43:07 969 2

原创 Ubuntu 下配置开机自启

操作系统: Ubuntu 16.04 x64Ubuntu 系统下配置程序自动启动有多种方法,本文介绍通过systemd配置守护进程的方法实现开机自启,以常用的安全隧道软件gost为例,介绍怎样将一个可执行文件配置为系统服务。配置 gost 开机自启gost是GO语言实现的安全隧道,支持多种网络协议,对多平台有着很好的支持。本文将gost配置为系统服务,从而实现开机自启。ubuntu系统...

2020-04-05 14:16:36 713

转载 绕固定坐标轴旋转与绕自身坐标轴旋转一致性证明

最近强子在学习坐标变换的内容,对于欧拉角变换矩阵很是好奇,怎么理解“绕固定坐标轴旋转与绕自身坐标轴旋转的一致性”呢,跟他讨论了许久,找到了一种比较清晰明了的证明方法,便于直观...

2020-04-05 14:08:52 2543 8

原创 Effective C++ 索引

《Effective C++》 由Scott Meyers 编写,是从初级C++程序员向高级进阶的桥梁,特别适合C++的初学者,或者准备面试的程序员,这本书中讲的全部是资深程序员的经验和技巧,对C++的工程应用有着很大的帮助。读了这本书,你将会理解工程源码中一些奇怪的处理。费时一个多月读完了这本书,下面是汇总的目录。注:其中第25条讲了模板和派生类中对函数名的遮掩,第35条提到了Strategy......

2020-04-05 13:57:49 411

原创 C++ 术语与概念

C++ 是在C语言基础上开发的,一种面向对象编程的语言。C++在C语言基础上封装了类实现了面向对象的功能,封装了函数实现了泛型编程的功能。与C相比具有安全性更高、功能更强的特点。本文以wiki知识库的形式,介绍C++的基本概念和语法规则,并在每个术语旁边配有对应的英文,为初学C++的人提供一份快速查阅的手册。旨在用最简短的文字,介绍清概念以及用法。基本概念面向对象编程 Object Orien...

2020-04-05 13:55:05 255

原创 加速C++的读写

今天在LeetCode刷题,看到高手的答案中有下面这行代码,了解了一下这些代码的含义,发现了提高C++读写速度的方法。static auto speedup = [](){ ios::sync_with_stdio(false); cin.tie(nullptr); return nullptr;}();C++中的输入输出流为std::cin和std::cout,与之...

2020-04-05 13:48:31 223

空空如也

空空如也

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

TA关注的人

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