
C++
文章平均质量分 69
蒋程扬
古月居签约作者,古月学院《如何开发一个ROS人机交互软件》原创作者。联系方式:chengyangkj@qq.com
展开
-
C++设置动态库的版本号(软链接)
假设有一个动态库:libfooSdk.so.1.1.0,其对应的三个名称如下。linux的动态库的命名格式是libfooSdk.so.x.y.z。在程序链接时只需要在cmakelist链接linkname即可。SOVERSION 对应soname的版本号。VERSION 对应relname的版本号。原创 2023-04-04 14:42:22 · 1685 阅读 · 1 评论 -
C++ Boost库使用笔记
boost库时c++常用的工具库,地位仅次于c++标准库,在工作中发现Boost库其实是有许多封装好的实用功能库,这里写篇笔记进行记录下,方便后面自己查阅使用一,program_options实现终端命令行参数解析在使用linux终端时会发现有许多命令行都有-h功能比如:man -h有这样一个需求,需要写一个小工具,并且小工具的接收参数可变,方便其他程序进行调用,这里我们可以通过main 函数的argc与argv接收可执行程序后面的参数,接着进行字符拆分(拆分’-’)从而判断各个参数。但是如果原创 2021-11-22 14:29:01 · 2069 阅读 · 0 评论 -
Ubuntu protobuf编译安装并在Qt中使用
一,编译protobuf首先去github下载最新protobuf的C++的relaease版本:release链接这里我下载的是v3.17.3解压到任意文件夹,进入文件夹:编译安装官方提供的有教程执行如下命令进行编译安装: ./configure make make check sudo make install sudo ldconfig 执行完make install,protobuf的头文件和lib文件则被成功的复制在 /usr/local路径下此时在终端输入如下命令,原创 2021-07-27 19:03:32 · 1954 阅读 · 2 评论 -
解决ROS编译安装Opencv项目出现undefined Reference to....问题
一,问题描述已经编译安装了Opencv,但是编译Opencv功能包时出现undefined Reference to…的错误二,解决方法这一般是由于多个Opencv环境冲突的问题,比如我这里编译安装Opencv3.3.1版本则需要通过以下命令安装:unzip opencv-3.3.1.zip cd opencv-3.3.1mkdir buildcd buildcmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/loc原创 2020-07-10 13:52:32 · 8167 阅读 · 3 评论 -
c++ String类的实现
主要是通过这个例子,理解拷贝构造函数和赋值函数的区别:代码:#include <iostream>#include <string.h>using namespace std;class String{ public: //构造函数 String(char *str); //拷贝构造函数 String(const String& ot...原创 2020-03-11 16:36:09 · 200 阅读 · 0 评论 -
c++动态生成二维数组
动态生成一维数组是使用:int *a=new int[3];动态生成二维数组就比较麻烦了:int row,column; cin>>row>>column; //方法一 //申请空间 //先申请指针的指针 int ** a = new int *[row]; //再给每行分配内存 for(int i = 0;i < row;i++) a[i]...原创 2020-03-09 16:35:25 · 511 阅读 · 0 评论 -
数据库面试题
文章目录DML,DDL,DCL分别使用什么命令DML,DDL,DCL分别使用什么命令DDL—数据定义语言(CREATE,ALTER,DROP,DECLARE)DML—数据操纵语言(SELECT,DELETE,UPDATE,INSERT)DCL—数据控制语言(GRANT,REVOKE,COMMIT,ROLLBACK)...原创 2020-03-09 10:54:34 · 189 阅读 · 0 评论 -
前缀表达式(波兰式),中缀表达式,后缀表达式(逆波兰式)
一,中缀表达式中缀表达式就是常见的运算表达式,如(3+4)×5-6二,前缀表达式前缀表达式又称波兰式,前缀表达式的运算符位于操作数之前比如:- × + 3 4 5 6前缀表达式的计算机求值:从右至左扫描表达式,遇到数字时,将数字压入堆栈,遇到运算符时,弹出栈顶的两个数,用运算符对它们做相应的计算(栈顶元素 op 次顶元素),并将结果入栈;重复上述过程直到表达式最左端,最后运算得出的值即...原创 2020-03-07 17:14:19 · 659 阅读 · 0 评论 -
c++产生随机数
c++没有产生随机数的方法,需要用rand(),和srand()在stdlib.h中;rand()%n 产生[0,n)之间的整数通用公式:a + rand() % n;其中的a是起始值,n是整数的范围#include <iostream>#include <stdlib.h>#include <time.h> using namespace std...原创 2020-03-05 09:44:24 · 842 阅读 · 0 评论 -
计算机网络常见面试题
文章目录1,计算机网络体系结构OSI,TCP/IP,五层协议的体系结构,及各层协议1,计算机网络体系结构OSI,TCP/IP,五层协议的体系结构,及各层协议原创 2020-03-04 15:14:37 · 865 阅读 · 0 评论 -
操作系统常见面试题
文章目录## 1,进程和线程的区别2,进程的几种状态## 1,进程和线程的区别进程是资源分配的最小单位,线程是CPU调度的最小单位同一个进程中可以包括多个线程,并且线程共享整个进程的资源(寄存器、堆栈、上下文),一个进行至少包括一个线程。进程结束后它拥有的所有线程都将销毁,而线程的结束不会影响同个进程中的其他线程的结束线程是轻量级的进程,他的创建和销毁所需的时间比进程小的多,所有操作系...原创 2020-03-03 10:18:01 · 449 阅读 · 0 评论 -
常用排序算法(图解与代码)
文章目录一,交换排序1,冒泡排序2,快速排序算法步骤:代码实现:二,插入排序1,直接插入排序2,希尔排序一,交换排序1,冒泡排序对于一组数,a[0],a[1],a[2]…a[n],排序后按照升序排列,首先比较a[0]与a[1]的值,如果a[0]大于a[1],则交换二者的位置,否则不变。继续比较a[1]与a[2],大于交换,否者不变,继续a[n-1]与a[n]比较,并进行交换。这样一轮下来,a...原创 2020-03-02 15:48:33 · 356 阅读 · 0 评论 -
c++常见面试题
知识点收集自网络,作为自己面试复习c++的笔记文章目录1,c和c++的区别2,c++和java的区别3,什么是面向对象,面向对象的几大特征是什么4,指针和引用的区别5,new/delete和malloc/free的区别6,volatile关键字7,static关键字7.1什么是static变量7.2 static关键字的作用8,const关键字8.1 const关键字的作用9,inline内联函...原创 2020-02-29 15:03:52 · 1332 阅读 · 1 评论 -
c++进阶十五(类模板的使用)
正如我们定义函数模板一样,我们也可以定义类模板。泛型类声明的一般形式如下所示:template <class type> class class-name {...}在这里,type 是占位符类型名称,可以在类被实例化的时候进行指定。您可以使用一个逗号分隔的列表来定义多个泛型数据类型。下面的实例定义了类 Stack<>,并实现了泛型方法来对元素进行入栈出栈操...原创 2020-02-27 19:51:19 · 230 阅读 · 0 评论 -
c++进阶十四(函数模板的使用)
1,隐式实例化隐式实例化例子:#include <iostream>using namespace std;//函数模板的声明//Ex是未知类型,编译器在编译时 进行实际生成 template<class Ex>Ex Creater(Ex x,Ex y); int main(){ int intX=1,intY=2; double doubX=1....原创 2020-02-27 19:37:56 · 254 阅读 · 0 评论 -
c++进阶十三(内存管理)
c++三种管理内存的方式:一. 自动存储(栈存储)函数的形参,函数内部声明的变量及结构体变量自动存储在栈里面在所属函数被调用时自动产生,在函数结束时自动消亡二. 静态存储(编译器预分配)每个程序都分配一段静态内存空间,永久存储,在程序开始时建立,程序运行结束时销毁static extern变量。1,extern关键字为全局变量(外部变量),在函数和类外部定义,可以在程序任一位置进行访...原创 2020-02-27 17:47:28 · 221 阅读 · 0 评论 -
c++进阶十二(结构体和类的区别)
C++中的struct对C中的struct进行了扩充,它已经不再只是一个包含不同数据类型的数据结构了,它已经获取了太多的功能。struct能包含成员函数吗? 能!struct能继承吗? 能!struct能实现多态吗? 能!既然这些它都能实现,那它和class还能有什么区别?最本质的一个区别就是默认的访问控制:默认的继承访问权限struct是public的,class是private的...原创 2020-02-27 15:08:44 · 171 阅读 · 0 评论 -
c++进阶十一(结构体和共用体,枚举的sizeof)
c++不同数据类型所占内存大小:类型32位64位char11int4大多数4,少数8short22long48float44double88指针481,结构体sizeof一般,结构体sizeof是结构体所有成员大小之和#include <iostream>using namespace ...原创 2020-02-27 15:01:05 · 761 阅读 · 0 评论 -
c++进阶十(虚函数)
1,什么是虚函数:在类里面使用vatrual修饰得函数称为虚函数2,先看下面一个例子:声明三个个类,其中child1,child2继承于base,并且存在相同的函数disp并且要实现display分别打印各个类的disp#include <iostream>using namespace std;class base{ public: void disp() ...原创 2020-02-27 13:42:16 · 293 阅读 · 0 评论 -
c++进阶九(重载覆盖和隐藏)
一,重载1,概念:在同一类中,函数名相同可以相同,但是函数的形式参数(指参数的个数、类型或者顺序)必须不同C++ 是如何做到函数重载的:C++代码在编译时会根据参数列表对函数进行重命名,例如void Swap(int a, int b)会被重命名为_Swap_int_int,void Swap(float x, float y)会被重命名为_Swap_float_float。当发生函数调用时...原创 2020-02-26 21:16:35 · 306 阅读 · 1 评论 -
c++进阶八(派生类的析构函数)
1,派生类对象被删除时析构函数的执行顺序当对象被删除时,派生类的析构函数被执行,先执行派生类的析构函数,再类的对象成员的析构函数,最后执行基类的析构函数与构造函数的执行顺序相反具体执行顺序:1,先执行派生类的析构函数2,执行类初始化表上的对象成员的析构函数3,执行基类的析构函数2,实例通过运行下面实例来理解上面的过程#include<iostream>using ...原创 2020-02-26 17:43:17 · 1356 阅读 · 0 评论 -
c++进阶七(派生类的构造函数)
派生类即对父类进行继承的类创建派生类时会调用派生类的构造函数时同时调用基类的构造函数一,派生类构造函数的格式:派生类名(派生类构造函数参数表):基类构造函数(基类构造函数参数表){函数体}二,派生类构造函数的功能1,完成对象所占整内存的开辟,由系统在调用构造函数时自动完成2,调用基类的构造函数,完成基类构造函数的初始化3,如果派生类中含有对象成员,const成员或引用成员,则必...原创 2020-02-26 17:28:14 · 326 阅读 · 0 评论 -
c++进阶六(引用和指针的区别)
1,引用只是变量的别名,指针是变量的地址指针-对于一个类型T,T就是指向T的指针类型,也即一个T类型的变量能够保存一个T对象的地址,而类型T是可以加一些限定词的,如const、volatile等等。见下图,所示指针的含义:引用-引用是一个对象的别名,主要用于函数参数和返回值类型,符号X&表示X类型的引用。见下图,所示引用的含义:2,引用不可以为空,指针可以为空引用在定义...原创 2020-02-26 15:39:16 · 208 阅读 · 0 评论 -
c++报[Error] ld returned 1 exit status
目前总结三种原因:1,之前的控制台未关2,在类中使用static变量,但是没有在类外对静态变量进行初始化具体可以看我这篇文章:添加链接描述原创 2020-02-26 15:22:24 · 698 阅读 · 0 评论 -
c++进阶五(static数据成员)
static(静态存储)数据成员,在编译时就被创建和初始化,在程序结束时被销毁并且在类中静态数据成员只有一个实例,对所有该类的对象共享就如住在一个宿舍中的学生,共享这个宿舍的门牌号一,定义静态数据成员注意需要在类的外面对静态成员变量进行初始化!!!!否者静态变量未初始化会报错 且不要放在.h文件中进行初始化,因为可能有多个cpp包含同一个.h文件下面看一个实例:#include &l...原创 2020-02-26 15:21:49 · 451 阅读 · 0 评论 -
c++进阶四(const成员函数与const成员变量)
一,const成员函数的声明1,类内声明类型 函数名(参数列表) const{函数体}**2,类外定义**类型 类名::函数名(参数列表) const{函数体}二,const成员函数的特点1,const成员函数内只能读取类的数据成员,无法修改类的数据成员,否者编译器会报错:class point{ //没有指出private函数public的话默认是privzte ...原创 2020-02-26 12:07:52 · 1133 阅读 · 0 评论 -
c++进阶三(容器和迭代器的使用)
一,容器1,vector容器连续存储结构,每个元素在内存上是连续的;支持高效的随机访问和在尾端插入/删除操作,但其他位置的插入/删除操作效率低下;相当于一个数组,但是与数组的区别为:内存空间的扩展。vector支持不指定vector大小的存储,但是数组的扩展需要程序员自己写。vector类定义了好几种构造函数,用来定义和初始化vector对象:vector v1; vector保存类型...原创 2020-02-26 11:15:48 · 293 阅读 · 0 评论 -
c++进阶二(动态分配内存)
二,动态分配内存1,new方法创建:new 释放delete删除数组为delete []a注意释放后需要令指针为NULL,防止产生野指针创建普通变量:int *a=new int;创建数组变量:int *a=new int[10]删除普通变量内存:delete a;删除数组变量:delete []a;防止a变为野指针:a=NULL;2,malloc方法#incl...原创 2020-02-25 12:19:19 · 225 阅读 · 0 评论 -
c++进阶一(宏定义)
一,宏定义宏定义是在编译前进行的,预处理1,基本语法#define A 1令代码中的符号A全都替换为1#define USE_DEF#ifdef USE_DEFprintf("USE_DEF")#endififdef 与endif的使用2,常考题有参宏定义的使用#define FUN(a) (a*a)int c=FUN(3+2)问此时的c的值为?正确答案:3...原创 2020-02-25 12:06:28 · 339 阅读 · 1 评论 -
c++实现字符串的split函数
c++没有标准split函数,刚好刷算法自己实现了,记录下并且具有多个字符去重功能。效果:代码:#include <iostream>#include <vector> using namespace std;vector<string> split(string sre,char split_char);int main(){ vect...原创 2020-02-10 18:13:48 · 423 阅读 · 0 评论 -
c++进阶零(智能指针)
一,什么是智能指针1.智能指针智能指针就是个类,对普通指针进行封装,他在析构函数中对指针可以进行智能释放2.普通指针普通指针在使用完成后需要进行手动释放,且容易造成堆的内存泄漏(忘记释放),二次释放,使用智能指针可以避免这些问题3 在c++11中智能指针分为3种包含在头文件中,分别为:shared_ptr、unique_ptr、weak_ptr4,三种智能指针归纳:类型功能...原创 2020-02-07 17:48:47 · 309 阅读 · 0 评论