c++
jack_20
这个作者很懒,什么都没留下…
展开
-
学习cartographer_ros优秀代码
using指定别名 enum class TrajectoryState { ACTIVE, FINISHED, FROZEN, DELETED };using TrajectoryState = ::cartographer::mapping::PoseGraphInterface::TrajectoryState;enum class T{} 或 enum class T : int {}enum Direction {TOP_LEFT, TOP_RIGHT, BOTT...原创 2021-01-09 14:32:27 · 426 阅读 · 1 评论 -
boost::lexical_cast万能转换的使用
提示:虽然在c中可是使用类似于atoi之类的函数对字符串转换成整型,但是我们在这儿还是推荐使用这个函数如果转换发生了错误,lexical_cast会抛出一个bad_lexical_cast异常,因此程序中需要对其进行捕捉。下面是程序示例:[cpp] view plain copy #include #include usi转载 2017-12-26 16:42:31 · 351 阅读 · 0 评论 -
直接初始化与拷贝(复制)初始化
std::set和std::map都有一个insert和emplace成员函数,那么,他们的区别是什么的?他们都往 set或map 里增加一个元素,区别在于新元素的构造上。emplace 使用直接构造,insert 使用复制(拷贝)构造。那么直接构造和复制构造有什么区别呢?认识这两种初始化(构造)有助于我们加深对语言的理解,可以更好的优化代码~我们常见的几种初始化的原创 2017-12-25 11:11:59 · 696 阅读 · 0 评论 -
C++11之tuple的使用
本文讨论的是在C++ 11标准下使用tuple在C++中的tuple和python语言中是类似的,是一个强大的允许存放多个不同类型数据的容器,是对pair的泛化。要在C++中使用tuple,首先需要引用头文件tuple及名空间std。和tuple相关的一共有4个函数,分别介绍1. make_tuple: 用于创建tuple[cpp] view plain原创 2017-12-25 11:20:23 · 2067 阅读 · 0 评论 -
C++ explicit关键字详解
首先, C++中的explicit关键字只能用于修饰只有一个参数的类构造函数, 它的作用是表明该构造函数是显示的, 而非隐式的, 跟它相对应的另一个关键字是implicit, 意思是隐藏的,类构造函数默认情况下即声明为implicit(隐式).那么显示声明的构造函数和隐式声明的有什么区别呢? 我们来看下面的例子:class CxString // 没有使用explicit转载 2017-12-06 16:11:45 · 202 阅读 · 0 评论 -
std::tuple类模板的理解与使用
场景std::pair 可以打包最多两个值到一个类里,常用在需要返回两个值的函数里,因为可以不需要自己定义一个wrapper类,普通集合类肯定不能用,因为C++的集合只能存储泛型的(相同类型)对象. 如果要存储超过2个不同类型的对象, 可以使用 std::tuple, 它能存储最多10个不同对象类型. 是不是发现Java的集合可以存储任意类型强大很多,因为Java对象有共同的根类型翻译 2017-12-20 22:13:38 · 2419 阅读 · 0 评论 -
深入分析C++中char * 和char []的区别
在程序员面试宝典上看到这个两句话:1、char c[]="hello world"是分配一个局部数组;2、char *c="hello world"是分配一个全局数组;最开始还以为是书上说错了,因为自己的理解是这两种方式是等效的。下来查了一下才知道这两种方式的区别。char* str="hello world ";这个指针指向常量字符串,存储在静态存储区,是只读的,原创 2017-12-12 11:53:49 · 975 阅读 · 0 评论 -
指针和const限定符
1、指向const对象的指针 const double *cptr; const double pi = 3.14; cptr = π注:1、C++语言强制要求指向const对象的指针也必须具有const特性。 2、不能使用void*指针保存const对象的地址,必须使用const void*类型的指针保存const对象的地址。原创 2017-08-31 17:45:21 · 326 阅读 · 0 评论 -
类成员函数后面+const
类成员函数中const的使用 形如:void fun() const; 如果一个成员函数的不会修改数据成员,那么最好将其声明为const,因为const成员函数中不允许对数据成员进行修改,如果修改,编译器将报错,这大 大提高了程序的健壮性。原创 2017-04-11 14:31:22 · 500 阅读 · 0 评论 -
内联函数
const string &shorterString (const string &s1, const string &s2){ return s1.size() < s2.size() ? s1 : s2;}为这样的小操作定义一个函数的好处是:·阅读和理解函数shorterString的调用,要比读一条用等价的条件表达式取代函数调用表达式并理解它的含义要容易得多。·原创 2017-08-31 15:08:44 · 224 阅读 · 0 评论 -
类成员的指针的使用
demo:class Screen {public: typedef std::string::size_type index; char get() const; char get(index ht, index wd) const;private: std::string contents; index cursor;原创 2017-08-30 12:08:21 · 578 阅读 · 0 评论 -
char数组和char*初始化
char*动态分配:用c语言中的(char*)malloc(sizeof(char)*n),或c++中的new char(n);char数组初始化初始化char str[10]="Hello";char str[10]={'H','e','l','l','o','\0'};char str[10]={'H'};char str[10]={0原创 2017-12-27 15:55:54 · 50043 阅读 · 0 评论 -
C++ map遍历
#include #include using namespace std;int main() { map _map; _map[0] = 1; _map[1] = 2; _map[10] = 10; map::iterator iter; iter = _map.begin(); while(iter != _map.end(原创 2018-01-04 15:48:05 · 716 阅读 · 0 评论 -
C++中4个与类型转换相关的关键字
static_cast reinterpret_castdynamic_castconst_cast1、static_cast------完成相关类型之间的转换使用场景:如在同一类层次结构中的一个指针类型到另一个指针类型,整型到枚举类型,或者浮点型到整型等。例: 1, int m=10; double n=static_cast <double> m; 2,...原创 2018-07-09 14:37:07 · 292 阅读 · 0 评论 -
C++三大特性
1.C++的三大特性为:继承,多态,封装 (1)继承。一个对象直接使用另一个对象的属性和方法。优点:1.减少重复的代码。 2.继承是多态的前提。 3.继承增加了类的耦合性。缺点:1.继承在编译时刻就定义了,无法在运行时刻改变父类继承的实现; 2.父类通常至少定义了子类的部分行为,父类的改变都可能影响子类的行为; 3.如果继承下来的子类不适合解决新问题,父类必须重写或替换,那么这种依...转载 2018-07-09 11:16:18 · 16646 阅读 · 0 评论 -
C++标准容器vector的resize方法和reserve方法的区别
首先要搞清楚容器vector的capacity(容量)与size(长度)的区别:size指容器当前拥有的元素个数。而capacity则指容器在必须分配新存储空间之前可以存储的元素总数。也可以说是预分配存储空间的大小。区别容器调用resize()函数后,所有的空间都已经初始化了,所以可以直接访问。而reserve()函数预分配出的空间没有被初始化,所以不可访问。划重点reserve和resize都不...原创 2018-04-11 16:27:33 · 472 阅读 · 0 评论 -
boost::thread的六种使用方法总结
boost::thread有两个构造函数: (1)thread():构造一个表示当前执行线程的线程对象; (2)explicit thread(const boost::function0<void>& threadfunc): boost::function0<void>可以简单看为:一个无返回(返回void),无参数的函数。这里的函数也可以是类重载op...原创 2018-04-11 10:22:48 · 37342 阅读 · 4 评论 -
C++获取时间戳
函数原型#include int gettimeofday(struct timeval*tv, struct timezone *tz); //函数返回一个时间结构体struct timeval{ long tv_sec;//秒 long tv_usec;//微秒}struct timezone{ int tz_minuteswest; int tz_dsttime;原创 2018-01-19 10:17:42 · 5406 阅读 · 0 评论 -
boost::bind的理解与使用
最近在几经波折之后,终于对于boost::bind有点理解了。对于习惯了其他语言的人来说,boost::bind是个挺神奇的东西,它可以将你的方法适配成任何其他的方法。其实这得益于c++的模板以及操作符重载,去看boost::bind的实现就会发现它是一个有n多重载的函数,这些重载主要是为了适应函数的参数个数。 其实boost::bind的原理是函数对象,而函数对象就是一个重载了()操作符原创 2017-12-21 12:27:51 · 8207 阅读 · 0 评论 -
memcpy与strcpy的区别
原型:void *memcpy(void *memTo,const void *memFrom,size_t size)char *strcpy(char *dst,constchar *src);相同点:1、strcpy与memcpy都可以实现拷贝的功能不同点:1、复制的内容不同。strcpy只能复制字符串,而memcpy可以复制任意内容,例如字符数组原创 2018-01-10 16:49:28 · 592 阅读 · 0 评论 -
protobuf之string类型的理解与使用
1、首先纠正一个大多数人都有的一个误区: std::string遇到'\0'并不会被截断!2、举个例子论证1#include #include int main(){ std::string temp = "abc\0def"; std::cout<<temp.length()<<std::endl;//没错,和你想的一样,输出是3.原因是:temp初始化是用了原创 2018-01-10 12:04:18 · 4249 阅读 · 0 评论 -
Qt中openGL显示cv::Mat图像问题
迫不及待写这篇博客了,因为它整整消耗了我一天的时间,没吃饭没午睡......遇到的问题是:无法在Qt的openGL中显示Mat图像原因很简单:中间用到的gRPC通信协议,图像数据的传输用的是std::string类型。也就是说,发送端图像数据是Mat,传输过程是string,接收端是char*。主要原因是Mat转换为std::string是出错,主要原因是:Mat src = imre原创 2018-01-06 15:55:20 · 2643 阅读 · 0 评论 -
using声明与using指令
书中提到using声明与using指令。using std::cin; 这就是一个using声明,就像一个普通的声明。以后提到cin时就指的是std里面的。using namespace std;这就是一个using指令,导入所有std里面的应用。除此之外,还需注意:(以下引自http://topic.csdn.net/u/20090416/22/9b01fda8-49a5-4ac4-转载 2017-09-15 10:55:40 · 1537 阅读 · 0 评论 -
static类成员
1、static成员函数没有this形参,它可以直接访问所属类的static成员,但不能直接使用非static成员。2、在成员申明前加上关键字static将成员设为static。static成员遵循正常的共有/私有访问规则。class Account {public: void applyint() {amount += amount * interestRate;} s原创 2017-08-24 11:51:27 · 421 阅读 · 0 评论 -
C++新特性lambda表达式的理解与使用
很多语言都提供了 lambda 表达式,如 Python,Java 8。lambda 表达式可以方便地构造匿名函数,如果你的代码里面存在大量的小函数,而这些函数一般只被调用一次,那么不妨将他们重构成 lambda 表达式。C++11 的 lambda 表达式规范如下:[ capture ]( params )mutable exception attribute -原创 2017-06-26 16:04:26 · 452 阅读 · 0 评论 -
C++关键字final与override
1. 如果一个类或结构体不希望被继承。class Base final{}; // 错误,Derive不能从Base派生。class Derive : public Base{};2. 如果一个虚函数不希望被override(覆盖)。class Base{public: virtual void Fun() fi原创 2017-06-24 17:20:51 · 381 阅读 · 0 评论 -
C语言编写基于TCP和UDP协议的Socket通信程序示例
Tcp多线程服务器和客户端程序服务器程序:#include #include #include #include #include #include #include #define PORT 8082#define BUFSIZE 512char buf[BUFSIZE+1]; void* fun(void* x){ //printf("enter threa转载 2016-12-08 22:01:32 · 7096 阅读 · 1 评论 -
ubuntu编译protobuf库
第一步:安装配置环境sudo apt-get install autoconf automake libtool curl make g++ unzip第二步:克隆protobuf源码git clone https://github.com/google/protobuf.git第三步:产生配置脚本文件./autogen.sh第四步:安装protobuf编译器proto原创 2017-06-16 14:44:00 · 1265 阅读 · 0 评论 -
C++文件读写详解(ofstream,ifstream,fstream)
在看C++编程思想中,每个练习基本都是使用ofstream,ifstream,fstream,以前粗略知道其用法和含义,在看了几位大牛的博文后,进行整理和总结:这里主要是讨论fstream的内容:#include ofstream //文件写操作 内存写入存储设备 ifstream //文件读操作,存储设备读区到内存中 fstr转载 2017-06-21 11:50:07 · 249 阅读 · 0 评论 -
Protocol Buffer Basics指导: C++
Protocol Buffer Basics: C++ This tutorial provides a basic C++ programmer's introduction to working with protocol buffers. By walking through creating a simple example application, it shows you how原创 2017-06-16 14:29:20 · 618 阅读 · 0 评论 -
c++移位运算
移位运算包含“逻辑移位”(logical shift)和“算术移位”(arithmetic shift)。逻辑移位:移出去的位丢弃,空缺位(vacant bit)用 0 填充。算术移位:移出去的位丢弃,空缺位(vacant bit)用“符号位”来填充,所以一般用在右移运算中。 c++中,整数分有符号数和无符号数两种,对于这两种数做左移、右移运算,稍有区别:1、如果是无符号数原创 2017-05-17 11:37:59 · 1403 阅读 · 0 评论 -
ros::spin() 和 ros::spinOnce() 区别及详解
ros::spin() 和 ros::spinOnce() 区别及详解版权声明:本文为博主原创文章,转载请标明出处: http://www.cnblogs.com/liu-fa/p/5925381.html博主提示:本文基于ROS Kinetic Kame,如有更(gèng)新版本,可能存在细微差别,请大兄弟以官方资料为准。博主向来愚钝,若大兄弟发现该文章有不妥之处转载 2017-04-26 09:51:55 · 1137 阅读 · 0 评论 -
C++类的交叉调用
举例说明一实际编程情况:a.h头文件#include "b.h"namespace test{class B;class A{privata:B* b;}}---------------------------------------b.h头文件#include "a.h"namespace test{class A;class B{原创 2017-04-25 15:14:53 · 676 阅读 · 0 评论 -
ROS services (ros::advertiseService和ros::serviceClient)的简单demo
我们将创建一个服务器节点add_two_ints_server,它将会收到两个整数,并且返回它们的和。切换目录到之前建立的beginner_tutorials包下:[html] view plain copycd ~/catkin_ws/src/beginner_tutorials 编辑src/add_two_ints_ser转载 2017-05-06 10:43:39 · 9095 阅读 · 2 评论 -
C++新特性之lambda表达式在for_each循环中的使用及for循环新写法
以前,在lambda表达式没有进入标准的时候,对容器的遍历等涉及到使用函数指针的情况,一般人会懒得使用std::for_each,也许只是一个短短的几句话,却要单独写个函数,或函数对象,写的代码反而不如自己用for循环来的快。但是,C++11引入了lambda表达式后,一切都变的简单了!1.lambda表达式lambda表达式是一个匿名函数,用它可以非常方便的表示一个函原创 2017-06-26 16:43:12 · 5957 阅读 · 0 评论 -
C++新特性auto关键字的理解与使用
熟悉脚本语言的人都知道,很多脚本语言都引入了“类型自动推断”技术:比如Python,可以直接声明变量,在运行时进行类型检查。随着C++11标准的发布,C++语言也引入了类型自动推断的功能,这就是我们今天要介绍的auto关键字。C++是一种强类型语言,声明变量时必须明确指出其类型。但是,在实践中,优势我们很难推断出某个表达式的值的类型,尤其是随着模板类型的出现,要想弄明白某些复杂表达式的返回类型转载 2017-06-26 16:11:39 · 1382 阅读 · 0 评论 -
友元
友元(friend)机制允许一个类将对其非公有成员的访问权限授予指定的函数或类。 元可以是普通的非成员函数,或其他类的成员函数,或整个类。将一个类设为友元,友元类的所有成员函数都可以访问授予友元关系的那个类的非公有成员。 当我们将成员函数申明为友元时,函数名必须用该函数所属的类名字加以限定。原创 2017-08-24 10:40:46 · 250 阅读 · 0 评论 -
文件的输入和输出
(1)ifstream,由istream派生而来,提供读文件的功能。(2)ofstream,由ostream派生而来,提供写文件的功能。(3)fstream,由iostream派生而来,提供读写同一个文件的功能。注:可以用IO操作符(>)在文件上实现格式化的IO。还定义了两个自己的新操作--open和close写个小程序:ifstream input;vector::cons原创 2017-08-28 11:28:56 · 293 阅读 · 0 评论 -
C++中的异常捕获与处理:Try、Throw、Catch关键字的理解和使用
一、C++异常机制使用了三个新的关键字 (SEH(结构化异常处理))try ──标识可能出现的异常代码段throw ──抛出一个异常catch ──标识处理异常的代码段二、抛出异常 throwthrow必须在 try代码块中.后边跟的值决定抛出异常的类型。三、捕获异常 catch 出现在try代码块后,后边跟的数据决定捕获的类型catch(...) /原创 2017-08-23 16:32:44 · 3415 阅读 · 0 评论 -
C++中break、continue、return的区别
//break是结束整个循环体,continue是结束单次循环 例如:while(x++ < 10){ if(x == 3) { break; } printf("%d\r\n", x);}结果是输出 1 2 就退出了整个while循环但是如果使用continuewhile(x++ < 10){原创 2017-04-11 15:27:06 · 4682 阅读 · 0 评论