![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
c++
文章平均质量分 70
记录cpp学习之旅
赵_|大人
这个作者很懒,什么都没留下…
展开
-
Kinect + ROS TUM数据制作
文章目录1. 环境配置1. 安装驱动2. 设置环境变量2. 录制rosbag包2.1 启动相机2.2 测试相机2.3 录制3. 提取rosbag包4. 生成rgb.txt 与 depth.txt5. RGB-D相机标定5.1 标定板角点提取5.2 相机内参5.3 ROS包-kinectv1 -- camera_calibration5.3.1 标定板下载5.3.2 相机和标定程序5.3.3 标定深度相机1. 环境配置1. 安装驱动sudo apt-get install ros-indigo-fre原创 2022-03-04 20:52:36 · 2474 阅读 · 2 评论 -
数据结构_1
文章目录0.算法和算法分析1.链表2.静态链表3.顺序栈4.链式顺序栈5.队列5.1 顺序循环队列5.2队列的链式存储6. 二叉树6.1 二叉树的创建7.图7.1 无向图邻接矩阵7.2 邻接表7.3 图的遍历7.3.1 深度优先遍历7.3.2 广度优先遍历8. 查找8.1 顺序查找算法8.2 有序查找8.2.1 折半查找8.2.2 插值查找8.2.2 斐波那契查找8.2 线性索引查找8.2.1 稠密索引8.2.2 分块索引8.2.3 倒序索引8.3 二叉排序树8.3.1 二叉排序树-查找8.3.2 二叉排序原创 2022-02-26 14:33:29 · 1154 阅读 · 1 评论 -
#pragma comment(lib,“urlmon.lib“)
#include <tchar.h>#include <iostream>#include <string>#include <urlmon.h>/** #pragma comment(lib,"urlmon.lib") 作用:* 连接静态库 urlmon.lib到项目中:效果等同于:* 项目属性--连接器--输入--附加依赖项加入这个lib;* * //!不需要将urlmon.lib 文件或 urlmon.dll 文件添加到项目文件中*原创 2021-11-09 16:27:52 · 873 阅读 · 0 评论 -
计算机视觉基础 (34)-世界坐标
文章目录0、预备概念1.相机模型所涉及的坐标系介绍1. 世界坐标系2. 相机坐标系3. 图像物理坐标系(为推出像素坐标系引入,为过渡项)4. 图像像素坐标系二、为什么需要世界坐标系?三、实践中,相机世界坐标系的指定1、单目相机2、双目相机写在前面:此部分内容来自:知乎:diversity文章链接:https://zhuanlan.zhihu.com/p/346131786对于刚接触相机模型的同学来说,会从各个渠道被告知 相机模型中的世界坐标系是假想坐标系,可以被任意选取,当然这种描述是简洁且正确转载 2021-10-24 10:26:04 · 580 阅读 · 0 评论 -
计算机视觉基础 (3)-坐标变换
图像处理、立体视觉等等方向常常涉及到四个坐标系:世界坐标系、相机坐标系、图像坐标系、像素坐标系。例如下图:转载 2021-10-24 09:53:27 · 640 阅读 · 0 评论 -
计算机视觉基础(2)-几何变换
文章目录1、 平移变换(Translation)1、二维空间2、三维空间2、 缩放变换(Scaling)1、二维空间2、三维空间3、 旋转变换(Rotation)1、 向量旋转1.1 平面二维旋转1.2 三维旋转1.3 助记2、 坐标系旋转2.1平面二维旋转2.2 三维旋转在三维图形学中,几何变换大致分为三种,平移变换(Translation),缩放变换(Scaling),旋转变换(Rotation)。1、 平移变换(Translation)1、二维空间在二维空间中一个点[x,y],移动到另一个点[原创 2021-10-23 12:30:15 · 1697 阅读 · 1 评论 -
相机模型_
1.我们通常说的针孔模型是一个极度简化的模型,其简化的对象是「单一的薄透镜作为镜头的相机」,其含义是:在适当程度近似后,一个单一的薄透镜作为镜头的相机,其光学行为一定程度上近似于一个针孔相机。首先看看薄透镜成像,这个在中学里都学过,大致可以用下图说明...原创 2021-10-21 17:32:53 · 196 阅读 · 0 评论 -
二维码的生成解码以及HTTP测试
1.二维码的生成需要的库QR Code generator library#include <climits>#include <cstdint>#include <cstdlib>#include <cstring>#include <iostream>#include <sstream>#include <string>#include <vector>#include <fst原创 2021-10-19 21:18:04 · 1343 阅读 · 0 评论 -
临时对象与编译优化
TODO;原创 2021-10-15 10:46:24 · 167 阅读 · 0 评论 -
设计模式!
文章目录1. 单例模式2. 工厂模式3.观察者模式4. 装饰器模式5.命令模式1. 单例模式单例模式: 单例模式主要解决一个全局使用的类频繁的创建和销毁的问题. 单例模式下可以确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。单例模式有三个要素:一是某个类只能有一个实例;二是它必须自行创建这个实例;三是它必须自行向整个系统提供这个实例。2. 工厂模式工厂模式: 工厂模式主要解决接口选择的问题。该模式下定义一个创建对象的接口,让其子类自己决定实例化哪一个工厂类,使其创建过程延迟到子类原创 2021-09-25 11:21:47 · 69 阅读 · 0 评论 -
拷贝(复制)构造函数与赋值重载运算符=
文章目录1. 拷贝构造函数2.总结1. 拷贝构造函数#include <iostream>#include <list>#include <vector>#include <random>using namespace std;class Construct{public: Construct(){ std::cout<<"构造函数:Construct()"<<std::endl; }原创 2021-09-22 16:57:07 · 202 阅读 · 0 评论 -
逻辑运算位运算
文章目录1. 逻辑运算1. 逻辑与 &&2. 逻辑或 ||3. 逻辑非 !1. 逻辑运算何为真? : 一切非零值为真;何为假?: 0 代表假;1. 逻辑与 &&当且仅当两个运算对象为真(非零)时结果为真;int x=100;int y=50;cout<<(x&&y)<<endl; //1int x=100;int y=0;cout<<(x&&y)<<endl; //02原创 2021-09-17 16:02:22 · 413 阅读 · 0 评论 -
网络通信TCP/IP
文章目录1.简述FTP工作流程2.同步I/O和异步I/O本质区别3.TCP和UDP的区别及TCP怎么保证传输的可靠性4.短链接和长链接的区别5.Tcp0、tcp 协议介绍1、TCP三次握手2、TCP四次挥手3、流量控制4、阻塞控制5、为什么是3次握手?6、为什么是4次挥手?7、为什么要进入TIME_WAIT状态等待2MSL?8、TCP协议握手时是否可以携带数据,可以在第几次握手时携带?9、第三次握手中,如果客户端的ACK未送达服务器,会怎样?10、如果已经建立了连接,但客户端出现了故障怎么办?11、初始序列原创 2021-09-08 22:41:11 · 1352 阅读 · 3 评论 -
大端存储与小端存储
1. 什么是大端和小端Little-Endian就是低位字节存放在内存的低地址端,高位字节存放在内存的高地址端。Big-Endian就是高位字节 存放在内存的低地址端,低位字节存放在内存的高地址端。即:低低高高为小端,高低低高为大端;例如:0x12345678的小端存储为:1)大端模式:低地址 -----------------> 高地址0x12 | 0x34 | 0x56 | 0x782)小端模式:低地址 ------------------> 高地址0x7原创 2021-09-05 22:12:16 · 3728 阅读 · 0 评论 -
构造函数执行多少次?
文章目录1. 构造函数执行多少次?1. 构造函数执行多少次?如果MyClass是一个类,执行"MyClass a[5],*b[6];,构造函数执行几次?"–>执行5次.执行构造函数,就是开始构造对象,为对象划分内存;同理如果给指针new 一个内存空间时,就会调用构造函数; MyClass a[5],*b[6]; //a[5]:生成一个数组,会分配5个对象; // *b[6]:生成一个指针数组,每一个元素可以指向一个数据类型为MyClass对原创 2021-09-05 21:37:19 · 2765 阅读 · 0 评论 -
条件变量与虚假唤醒
1. 条件变量假若现在存在两个线程A与线程B,线程B向线程A发送一个信号时,线程A才开始向下执行。std::condition_variable实际上是一个类,是一个和条件相关的一个类,等待一个条件达成,才能执行相关操作;这个类是需要和互斥量来配合工作的,用的时候我们要生成这个类的对象;...原创 2021-09-05 16:56:42 · 548 阅读 · 0 评论 -
std::call_once()与指针函数,向函数传递函数
文章目录1.std::call_once(): 指定函数只会被执行一次2.指针函数2.1 函数作形参1.std::call_once(): 指定函数只会被执行一次std::call_once()该函数的第二个参数是一个函数名 fun();std::call_once()的功能是保证函数 fun() 只会被调用一次(无论是单线程中多次被调用,或者在多线程中被多次调用);std::call_once()具备互斥量这种能力,而且在效率上,比互斥量的消耗的资源更少;std::call_once()需要与一原创 2021-09-04 15:05:09 · 387 阅读 · 0 评论 -
析构函数定位虚函数的作用
析构函数定位虚函数的作用当一个继承类经由一个基类的指针删除时,而该基类包含的是一个非虚析构函数,其结果是未定义的(实际执行时通常发生的是继承类的独有成分没有被销毁)。这个后果很严重,会造成**内存泄漏**。通过基类指针删继承类时,需要特别注意!!/** 当一个继承类经由一个基类的指针删除时,而该基类包含的是一个非虚析构函数,* 其结果是未定义的(实际执行时通常发生的是继承类的独有成分没有被销毁)。* 这个后果很严重,会造成内存泄漏。** 通过基类指针删继承类时,需要特别注意!!*/#.原创 2021-08-31 20:42:08 · 100 阅读 · 0 评论 -
世界坐标系
一、为什么需要世界坐标系?受限于相机FOV(视场角)以及拍摄时的位置与角度,拍摄的单张图像所含信息有限,当需要把多张图像的信息聚合在一起时,所面临的一个问题就是 不同图像在拍摄时处于各自的 **相机/物理/像素 **坐标系中,这些相对坐标系绝大部分情况下并不相同,要同时处理多张图像信息,便必须将多张图像的信息放置于同一个坐标空间内,使用相同的标准进行描述。即想将不同视点/视角拍摄的图像信息整合在一起就必须将所有的信息放在同一个坐标系下,这个坐标系应与各张图像的 相机/物体/像素 这些相对坐标系无关,在确转载 2021-08-26 16:32:01 · 3814 阅读 · 0 评论 -
lambda表达式与正则表达式
文章目录1.lambda表达式:1.1向lambda表达式传递参数1.2 使用捕获列表1.3 捕获形式:1.4 修改捕获值 mutable:1.5 指定返回类型:1.6 lambda主要使用场合:1. lambda表达式基本使用2 lambda捕获块2.1 捕获的简单使用2.4 捕获的作用4. lambda表达式赋值很显然赋值不可以,而拷贝则可以,结合编译器自动生成构造函数规则,很明显,赋值函数被禁用了,而拷贝构造函数则没有被禁用,所以不能用一个lambda表达式给另外一个赋值,但可以进行初始化拷贝。2.正翻译 2021-07-21 10:29:34 · 609 阅读 · 0 评论 -
aort()与exit()
文章目录1.exit2.abort()3.conclusionexit():abort():exit和abort函数,其功能都是终止程序的执行,将流程控制返回给操作系统。通常,exit用于正常终止程序的执行,abort用于异常终止程序的执行。1.exitexit用于正常终止程序的执行。exit(表达式);其中,表达式的值只能是整型数。通常把表达式的值作为终止程序执行的原因。执行该函数时,将无条件地终止程序的执行而不管该函数处于程序中的什么位置,并将控制返回给操作系统。通常表达式的取值为一个原创 2021-07-21 10:23:30 · 184 阅读 · 0 评论 -
Boost asio tcp通讯
使用Boost.asio 进行网络通信;tcp 通信://server.cpp#include <iostream>#include <boost/asio.hpp>using namespace std;using namespace boost::asio;int main(){ try { typedef ip::tcp::acceptor acceptor_type; typedef ip::tcp::endp原创 2021-07-21 10:10:01 · 317 阅读 · 0 评论 -
智能指针.
智能指针全局对象在程序启动时分配,在程序结束时销毁;对于局部自动对象,当我们进入其定义所在的程序块时被创建,在离开块时销毁.局部static对象在第一次使用前分配,在程序结束时销毁.1.普通指针初始化方法://方法一:string str,*strp;str="hello";strp=&str;//方法二:string str="hello";string *strp=&str; //注意这里直接是初始化了一个string对象&;2.动态内存划分//1.翻译 2021-07-21 10:08:35 · 1086 阅读 · 0 评论 -
std::bind()与std::ref()
文章目录1.std::bind()1. 前言2. std::bind()的作用3.placeholders的作用4.std::bind()使用测试4.1 固定参数、调换顺序4.2 普通函数的参数中有引用类型4.3 普通函数嵌套包装5.包装类成员5.1 成员变量的包装6.总结2.std::ref和std::cref1.为什么需要std::ref和std::cref1.2运行结果:1.3结果分析3.std::ref()和&1.探究过程2.结论1.std::bind()1. 前言不知道大家在做项目写原创 2021-07-21 10:06:12 · 1012 阅读 · 0 评论 -
C 语言结构体
文章目录1.0 C语言结构体1.1 定义结构类型变量1.2 结构变量的初始化和引用2.结构体数组3. typedef 用于结构体3.1 typedef 用于数组3.2 typedef 用于结构体数组1.0 C语言结构体C 语言的结构体与Cpp的结构体定义不同:#include <stdio.h>struct Student{ char name[50]; int age;};int main(){ struct Student stu1={"zhangs翻译 2021-07-21 10:02:59 · 60 阅读 · 0 评论 -
linux_cmake_生成库与链接库.md
0.最小cpp系统构成最小cpp系统构成,只需要一个CMakeLists.txt文件和一个main.cpp;//CMakeLists.txtcmake_minimum_required(VERSION 3.0)project(addlib)add_executable(test main.cpp)//所以最小cpp系统只需要三句cmake,如果需要添加自定义的头文件,和库文件,则需要将其包含在add_executable();此部分见##1.1.不使用用自定义库文件在Linux中需要使原创 2021-07-13 15:45:21 · 214 阅读 · 0 评论 -
c++面试题
文章目录1.1.c++域操作符:1.2.i++与++i的区别1.3.++i与i++那个效率高:1.4.有符号变量与无符号变量的值转换1.5.不使用任何中间变量,交换a与b的值1.6.C与C++有什么不同1.7.如何理解C++是面向对象化的,而C是面向过程化的1.8.C++中main函数执行完后还会执行其他语句吗2.1 宏定义,编译与链接2.2 用#define 实现宏并求最大值和最小值2.3 宏定义易错点2.4宏参数的连接2.5 用宏定义得到一个数组所含的元素个数2.6 找错-const2.7 #defin原创 2021-07-06 23:06:27 · 1165 阅读 · 1 评论 -
tuple c++
文章目录1.tuple 类型2.定义与初始化tuple3.访问tuple的成员->get():返回指定成员的引用4.tuple_element:返回指定成员的类型5.关系和相等运算6.使用tuple返回多个值;1.tuple 类型与pair类型相似,pair类型只有两个成员,但是tuple成员可以拥有任意数量的成员,可以将tuple看做成一个快速而随意的数据结构.实例说明tuple<T1,T2,T3,…,Tn> t;t是一个tuple,成员数为n,第i个成员的类原创 2021-06-23 23:03:47 · 174 阅读 · 3 评论 -
动态内存划分
文章目录1.存储分配2.静态存储分配内存2.1静态存储空间分配的优点:2.2静态存储空间分配的缺点:3.动态存储分配3.1 格式1:分配单个空间3.3 格式2:分配连续空间(数组)3.2 格式3:分配大小不知的存储空间4.动态空间释放1.存储分配存储分配就是为程序中用到的数据分配存储空间。2.静态存储分配内存通常变量数组都是先定义再使用,定义后编译器就可以根据其类型确定其所占存储空间的大小。2.1静态存储空间分配的优点:用户在编程时,只需定义变量或数组即可,等到变量或者数组的生命周期结束,编译器原创 2021-06-10 20:55:41 · 99 阅读 · 0 评论 -
类class
文章目录1.封装2.继承3.多态4.类成员的三种属性4.1 private成员:4.2 protectd成员:4.3 public成员:5.构造函数6. 析构函数7. 构造对象的顺序8. 临时对象9. const成员与对象9.1 const成员数据9.2 const 成员函数10. 常对象10.111. 静态成员12. 静态成员函数13. 重载运算符14. 继承14.1 单继承14.2 多继承14.3 派生类的构造函数和析构函数14.3.1 单继承构造函数14.3.2 多继承构造函数14.3.3 有子对象的原创 2021-06-03 17:45:18 · 437 阅读 · 0 评论 -
lambda表达式与正则表达式
文章目录1.lambda表达式:1.1向lambda表达式传递参数1.2 使用捕获列表1.3 捕获形式:1.4 修改捕获值 mutable:1.5 指定返回类型:1.6 lambda主要使用场合:1. lambda表达式基本使用2 lambda捕获块2.1 捕获的简单使用2.4 捕获的作用4. lambda表达式赋值很显然赋值不可以,而拷贝则可以,结合编译器自动生成构造函数规则,很明显,赋值函数被禁用了,而拷贝构造函数则没有被禁用,所以不能用一个lambda表达式给另外一个赋值,但可以进行初始化拷贝。2.正原创 2021-06-03 17:33:02 · 2067 阅读 · 0 评论 -
多线程Cpp
文章目录0.基本概念1.进程2.线程3.并发3.1 多进程并发3.2 多线程并发4.jion()5.detach()6.jionable()7.注意8.粒度1.线程休眠2.启动线程3.传递参数3.1传递临时对象作为线程参数4.线程id5.传递类对象、智能指针、类成员函数和类对象作为线程参数5.1 传递类对象5.2 传递智能指针5.3 类成员函数5.3 类对象6.数据共享问题:6.1 只读数据6.2 读写数据7.互斥量7.1 互斥量的使用7.2 std::lock_guard()8.死锁8.1概念8.2 死锁原创 2021-05-21 16:40:54 · 1580 阅读 · 0 评论 -
Mat与Eigen
Eigen: 官网地址.eigen的数据结构类型主要有:Matrix,Vector;其中大小又分为固定和动态两类,初始化方法如下:Matrix初始化/*Matrix原型template<typename _Scalar, int _Rows, int _Cols, int _Options, int _MaxRows, int _MaxCols>class Eigen::Matrix< _Scalar, _Rows, _Cols, _Options, _MaxRows, _Ma原创 2020-12-25 17:37:51 · 587 阅读 · 0 评论 -
review(1)
1.读取数量不定的输入数据#include<iostream>using namespace std;int main(){ int sum = 0, value = 0; while (std::cin>>value) //读入一个数据,执行一次循环 { sum += value; } std::cout << "Sum is :" << sum << std::endl; return 0;}此循环的条件是std:原创 2020-11-17 22:05:20 · 145 阅读 · 0 评论 -
vector 二维数组
动态数组int *p;p = new int[m]; //注意,int[m]表示一个有m个元素的指针数组 //p=new int(8)表示分配一个int空间并初始化为8;for (int i = 0; i < m; ++i){ p[i] = new int[5];}利用Vector的push_back函数vector<vector<int>> vec; //外层vector<int> a; //内原创 2020-10-20 21:56:22 · 31658 阅读 · 0 评论 -
类的基础性总结
虽然接触cpp也有一段时间了,今天在进行复习回顾的时候,在一些细节上还是有点欠缺,特此整理。默认构造函数1.如果在定义类的时候没有指定默认构造函数,系统就会自动生成一个构造函数,函数体为空,表示对数据成员不做任何操作;2.如果定义了构造函数,则系统不会自动生成一个构造函数;3.参数全部默认的构造函数只能有一个,换句话说,可以不提供参数而调用的构造函数只能有一个;//下面两种是不能同时出现的test(double x=1,double y=1,double z=1);test();//构造函原创 2020-10-10 10:13:58 · 194 阅读 · 0 评论 -
vector中push_back后iterator程序崩溃的原因分析
一、首先必须弄清楚两个概念:capacity:指容器在分配新的存储空间之前能存储的元素总数。size:指当前容器所存储的元素个数由于vector对象在插入或添加时自动调整长度(注意:只会自动增加长度,不会自动减小长度),因此可以将vector的长度设置成0;当然,也可指定存储长度:vector<typename> objection_name(n_elem);//存储n_elem个类型为typename的元素;二、push_back()push_back()成员函数的作用是在容原创 2020-05-27 21:41:41 · 3325 阅读 · 0 评论 -
c++标准库
添加链接描述c++标准库转载 2020-05-26 19:03:40 · 155 阅读 · 0 评论 -
VS中提示图的含义
认识图框提示,可以帮助快速理解程序:参考地址:https://docs.microsoft.com/en-us/visualstudio/ide/class-view-and-object-browser-icons?view=vs-2015&redirectedfrom=MSDN中文解释:转载 2020-05-26 10:26:26 · 263 阅读 · 0 评论 -
Srceen function
#include<iostream>#include<string>using namespaces std;class Screen{ public: typedef std::string::size_type index;//类型别名; Screen(const std::string &text,index ht=0,index wt=0)//...原创 2019-11-11 12:41:45 · 192 阅读 · 0 评论