- 博客(15)
- 资源 (3)
- 收藏
- 关注
原创 [ROS] 手把手教你如何从无到有构建一个ROS软件包
1、一个ROS软件包由什么组成一个符合catkin规范的package.xml文件这个package.xml文件提供有关该软件包的元信息,包括作者信息、版权、依赖一个catkin版本的CMakeLists.txt文件如果ROS软件包是一个catkin元包的话,则需要有一个CMakeLists.txt文件的相关模板,是ROS的编译系统catkin需要使用的文件,描述了package的各种编译规则,需要的源文件、库文件、搜索路径等每个包必须有自己独立的目录,保存各种文件,packa
2021-08-29 21:03:29
1839
原创 [C++] C++输入输出之cin、cin.get()、cin.getline()、getline()的用法
C++输入输出cin用法一:跳过不可见字符(空格、回车、Tab)#include <iostream>using namespace std;int main() { int a; int b; cin >> a >> b; cout << a + b << endl; return 0;}输入:1 回车 2 回车输出:3用法二:不跳过不可见字符(空格、回车、Tab),接受一个
2021-08-18 20:57:30
227
原创 [计算机操作系统] 进程、线程、线程池、协程的区别与联系
计算机操作系统之进程、线程、线程池、协程1、进程、线程、协程用一个表格来总结进程线程协程定义进程就是进程实体,进程是资源分配和调度的基本单位。进程是程序的一次执行过程。进程是一个程序及其数据在处理机上顺序执行时所发生的活动。线程是程序执行的基本单位。线程是轻量级的进程。每个进程都有唯一的主线程,主线程和线程是相互依存的关系,主线程结束进程也会结束协程是线程内部调度的基本单位切换者操作系统操作系统用户切换过程用户态->内核态->用户态用户态
2021-08-18 13:34:14
1191
1
原创 [C++] C++之static
局部对象形参和函数体内部定义的变量统称为局部变量局部静态对象令局部变量的生命周期贯穿函数调用以及之后的时间。可以将局部变量定义成static类型局部静态对象在程序的执行路径第一次经过对象定义语句时初始化,并且直到程序终止才被销毁。代码举例:size_t count_calls() { static size_t ctr = 0;//调用结束后这个值仍然有效 return ++ctr;}如果局部静态变量没有显式的初始化,它将执行值初始化,内置类型的局部静态变量初始化为0
2021-08-10 22:18:59
151
原创 [C++] C++11新特性之final和override关键字
final和override说明符出现在形参列表(包括任何const或者引用修饰符)以及尾置返回类型之后override派生类如果定义了一个函数与基类中的虚函数名字相同但是形参列表不同,这仍然是合法的行为编译器将会认为新定义的这个函数与基类中原有的函数相互独立派生类中的函数并没有覆盖掉基类中的函数版本这实际上是一个错误,但是编译器并没有发现这个错误C++11中可以使用override关键字来说明派生类中的虚函数如果派生类中使用了override标记了某个函数,但该函数并没有覆盖基类中已存在的虚
2021-08-10 19:38:26
346
转载 [C++] C++11新特性之explicit关键字
参考C++ explicit关键字详解C++提供了关键字explicit,可以阻止不应该允许的经过转换构造函数进行的隐式转换的发生,声明为explicit的构造函数不能在隐式转换中使用。C++中,只有一个参数的构造函数(或者除了第一个参数外其余参数都有默认值的多参构造函数), 承担了两个角色。一是构造二是默认且隐含的类型转换操作符所以,在我们写下如 a = b,这样的代码,且恰好b的类型正好是a单参数构造器的参数类型,这时候编译器就自动调用这个构造器,创建一个a的对象。C++中的exp
2021-08-10 13:33:54
179
原创 [C++] C++之resize和reserve
改变容器大小,resize增大或者缩小容器array不支持resize如果当前容器大小大于所要求的大小,容器后部的元素会被删除如果当前容器大小小于所要求的大小,会将新元素添加到容器后部vector<int> vec(10, 1);//容器中含有10个1,size为10vec.resize(15);//将5个值为0的元素添加到vec的末尾,size变为15vec.resize(20, 10);//将5个值为10的元素添加到vec的末尾,size变为20vec.resize(5)
2021-08-09 15:28:13
1009
原创 [C++] C++11新特性之emplace、emplace_back、emplace_front操作
emplace操作C++11新标准引入了三个新成员:emplace、emplace_back、emplace_front,分别对应insert、push_back、push_frontemplace操作构造而不拷贝元素调用push或者insert时,将元素类型的对象传递出去,这些对象被拷贝到容器当中,或者创建一个局部临时对象,并将其压入容器调用emplace时,则是将参数传递给元素类型的构造函数,emplace成员使用这些参数在容器管理的内存空间中直接构造元素,没有拷贝的操作代码举例:#in
2021-08-09 14:30:46
9131
原创 [C++] C++之sizeof和strlen
参考C++ Primersizeof运算符sizeof运算符返回一条表达式或者一个类型名字所占的字节数,返回值是size_t类型的常量表达式。size_t是一种机器相关的无符号类型,它被设计的足够大以便能表示内存中任意对象的大小。sizeof (类型)sizeof 表达式//返回表达式结果类型的大小,sizeof并不实际计算其运算对象的值//定义一个student类型struct student { std::string name; int number = 0;}
2021-08-09 10:29:24
524
原创 [C++] C++中的begin和end
容器:begin和end函数begin和end是vector的两个成员函数begin和endbegin:返回指向容器第一个元素的迭代器end:返回指向容器最后一个元素下一个位置的迭代器begin和end返回的具体类型由对象是否是常量决定:如果对象是常量,begin和end返回const_iterator如果对象不是常量,返回iteratorvector<int> v1;const vector<int> v2;auto itr1 = v1.be
2021-08-08 17:35:44
15014
转载 [C++] C++之const、constexpr变量、constexpr函数总结
const是一种类型修饰符定义一个变量,它的值不能被改变。比如用一个变量来表示缓冲区的大小。const int size = 128;//const的int类型size = 1;//const对象一旦被创建以后,其值就不能再改变 const int i = get_size();//正确,运行时初始化const int j = 11;//正确,编译时初始化const int k;//错误,k是一个未经初始化的常量const对象必须初始化初始化默认状态下,const对象仅在文件
2021-08-08 16:11:16
756
原创 [C++] C++11新特性之左值右值、引用、左值引用右值引用、move、forward
参考C++ PrimerC++ 11 左值,右值,左值引用,右值引用,std::move, std::foward左值右值C++的表达式要么是左值,要么是右值。简单说,左值可以位于赋值语句的左边,右值则不能。右值:当一个对象被用作右值的时候,用的是对象的值(内容),右值要么是字面常量,要么在表达式求值过程中创建的临时对象,没有名字,不能被赋值。左值:当一个对象被用作左值的时候,用的是对象的身份(在内存中的位置),左值就是有名字的对象,可以被赋值,左值可以被取地址,左值持久需要右值的地方
2021-08-06 13:59:58
287
转载 [C++] C++11新特性之lambda表达式(匿名函数)、bind函数(函数适配器)、function模板类型(可调用对象包装器)
什么是lambda表达式?一个lambda表达式可以理解为是一个一个未命名的内联函数,也就是可调用的代码单元,即可调用对象。lambda表达式定义立即执行,无需跳出当前函数,可以简化代码,可以把多行代码简化成一行。可调用对象有四种:函数函数指针重载了函数调用运算符的类lambda表达式bind创建的对象与任何函数类似,一个lambda表达式具有:一个返回类型、一个参数列表、一个函数体。与函数不同的是,lambda表达式可定义在函数的内部。lambda表达式的形式[捕获列表
2021-08-06 10:22:55
506
原创 [C++] 由浅入深学习C++11多线程并发(互斥量、生产者消费者问题、线程池)
参考C++多线程并发基础入门教程我主要是对线程池部分做了拓展什么是C++多线程并发?线程:操作系统能够进行CPU调度的最小单位,它被包含在进程之中,一个进程可包含单个或者多个线程。可以用多个线程去完成一个任务,也可以用多个进程去完成一个任务。它的本质相当于多个人去合伙完成一件事情。多线程并发:把一个任务拆分成多个子任务,然后交由不同线程处理不同子任务,使得多个子任务同时执行。C++多线程并发:将任务的不同功能交由多个函数分别实现,创建多个线程,每个线程执行一个函数,一个任务就这样同时由不同
2021-08-05 17:33:23
509
原创 [C++] C++11新特性之智能指针shared_ptr和unique_ptr的使用详解
参考C++ Primer 第5版C++11 Smart Pointers直接管理动态内存在C++中,动态内存的管理是通过一对运算符来完成的:new:在动态内存中为对象分配空间并返回一个指向该对象的指针,可以选择对对象进行初始化int *pi = new int;//pi指向一个动态分配的、未初始化的无名对象string *ps = new string;//初始化为空stringint *pi = new int(1024);//pi指向的对象的值为1024string *ps =
2021-08-05 11:29:03
1462
几个常用的zeal离线API
2020-09-02
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人