| by msbeta | No comments

C++11高级技巧:函数如何返回多个不同类型的值

假设存在如下功能需求:定义一个函数,它的功能是解析网页内容,从中找出改网页链接的其它网站的url。当网页内容解析成功时,返回true,并且返回网页内包含的所有url;当网页内容解析失败时,返回false。

这个函数需要根据处理结果,返回两种状态:成功或者失败;在成功时,还要返回查找到的url。也就是说,函数要返回两种不同类型的返回值,如何实现呢?

一般的实现逻辑如下所示,它将状态的返回值作为函数的返回值,其它返回值通过函数的参数返回。

当然,这种做法是完全可以满足功能要求,也是C++中惯用的方法。C++中为了满足多返回值,通过有两种途径:

1、通过参数的指针或者引用[……]

继续阅读

Read More
| by msbeta | No comments

C++高级技巧-协助编译器消除函数的返回值的额外调用开销

假设存在以下有理数的C++类:

有理数的乘法操作符定义如下:

测试代码执行效果:

代码的执行结果如下:

可以看到,*操作符消耗了一个构造函数(result的构造)、一个拷贝构造函数(result赋值给z)、一个析构函数(result的析构)。

有没有方法能够消除一部分额外的调用?答案是有的,修改*操作符的实现如下:

代码的执行结果如下:

可以看到,函数执行减少一次拷贝构造函数的调用。为什么为这样呢?这其实是编译器的返回值优化(Return Value Optimization,RVO)机制:当函数返回用户定义的非匿名对象时,这个[……]

继续阅读

Read More
| by msbeta | No comments

Ubuntu 18.04和Ubuntu 16.04如何安裝Google Chrome

1.Add Google Chrome Repository

Download the Google signing key and install it.

Set up the Google Chrome repository.

2.Install Google Chrome

Update repository.

Install Google Chrome Stable.

3.Google Chrome启动

3.1 图形界面下启动

Ubuntu 18.04Activities >> 搜索 Google Chrome[……]

继续阅读

Read More
| by msbeta | No comments

QGIS如何访问远程PostgreSQL数据库

QGIS是一个开源的,跨平台桌面GIS软件,可运行在Linux、Unix、Mac OSX和Windows等平台之上. 它功能强大,能够支持数十种GIS数据格式,支持PostGIS数据库,支持对地图要素的查看编辑,支持从WMS、WFS服务器中获取数据等功能.

QGIS如何远程访问PostgreSQL数据库

PostgreSQL+PostGIS是存储和处理地理空间信息的黄金组合。QGIS可以直接从PostgreSQL+PostGIS数据库中加载数据,但默认情况下,PostgreSQL远程访问不能成功。设置远程访问的步骤如下:

1. 修改postgresql.conf

p[......]

继续阅读

Read More
| by msbeta | No comments

C++中检查字符串是否以指定字符串开头

在C++中,std::string没有提供starts_with()函数用来检查字符串是否以指定字符串开头.本文讨论如何使用std::string::find和Boost库实现starts_with()的功能.

1.使用STL的string::find()函数实现starts_with()功能

std::string类提供了find()函数,它支持从输入字符串中查找目标字符串.查找成功,返回目标字符串在输入字符串中的位置;查找失败,返回std::string::npos.

所以,使用std::string::find查找目标字符串首次在输入字符串中的出现位置.如果返回的pos[……]

继续阅读

Read More
| by msbeta | No comments

C++11新特性-std::any_of

std::any_of是在C++ 11中引入的STL算法。当需要从一系列元素中查找是否存在任意一个元素满足给定条件的时候尤其有用。

1.需要引入头文件

2.函数原型

std::any_of()针对[first, last)之间的所有元素调用pred,任何一个元素返回ture,函数就停止迭代,返回true,否则返回false。

函数的行为等效于:

3.std::any_of()应用示例-Using std::any_of() with  Lambda Function

1、检查数组中是否存[……]

继续阅读

Read More
| by msbeta | No comments

从零开始学习自动驾驶系统(六)-Error State Kalman Filter(ES-KF)

ES-KF的基本思想就是把State区分为两部分分:Nominal State和Error State。如下所示:

$$x = \hat{x} + \delta x$$

其中$x$是True State,$\hat{x}$是Nominal State,$\delta x$是Error State。

ES-KF直接估计Error State,然后用它矫正Nominal State。在整个滤波过程中,我们实际上修正的变量是$\delta x$,这点一定要清楚!!

Predection

$$\begin{aligned}\underbrace{x_{k} – f(\ha[……]

继续阅读

Read More
| by msbeta | No comments

如何在Markdown中插入箭头符号

对于一个从事人工智能领域的工作者来说,Markdown的使用必须要驾轻就熟。记录箭头符号,以备日常工作使用。

1.普通Markdown箭头符号

箭头形状MarkDown$\uparrow$\uparrow$\Uparrow$\Uparrow$\downarrow$\downarrow$\Downarrow$\Downarrow$\leftarrow$\leftarrow$\Leftarrow$\Leftarrow$\rightarrow$\rightarrow$\Rightarrow$\Rightarrow$\updownarrow$\updownarrow$\Updownarro[……]

继续阅读

Read More
| by msbeta | No comments

[定位原理揭秘第四期]精准导航领域的定位技术

2013年9月,国家导航与位置服务科技专项总体专家组发布了《室内外高精度定位导航白皮书》,其中介绍到,2012年12月,我国宣布北斗导航系统正式提供区域定位导航服务,定位精度为10米,成为第三个拥有自主卫星导航系统的国家。在此基础上,通过提供室内导航信号和室外卫星导航增强信号,具备室外广域实时定位精度优于1米、室内定位精度优于3米的定位能力。从而基本满足了人们对于全时空高精度定位导航服务的需求,一时间,高精度导航定位似乎已经走进了我们的生活。

1.  白话介绍差分卫星定位

相信大家在使用GPS的时候,经常遇到偏差几十米甚至几百米的情形。我们在之前的文章中,介绍过这个误差不[……]

继续阅读

Read More
| by msbeta | No comments

[定位原理揭秘第三期]室内定位技术原理揭秘

地图软件已经成为我们日常出行必不可少的工具之一,在导航和搜索上带来了很多便捷的帮助。而定位技术在地图软件里的应用可谓无法替代,尤其是在小范围的室内定位环境下,如何帮助用户高精度搜索导航,是百度地图定位技术的研究重点。

我们一提到定位,大家印象中最熟悉的技术可能就是GPS定位。其实更为准确的说法是GNSS(Global Navigation Satellite System)定位,中文含义就是全球卫星定位系统,而 GPS只是GNSS中的一种实现方法,该系统是由美国部署的。另外,还有其他类型的定位系统,例如,俄罗斯的格洛纳斯(GLONASS),欧洲的伽利略和中国的北斗。大家可能会有疑问,既然[……]

继续阅读

Read More