![](https://img-blog.csdnimg.cn/20201014180756918.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
c/c++
文章平均质量分 74
mhrobot
这个作者很懒,什么都没留下…
展开
-
C++多线程编程基础
C++多线程编程基础原创 2022-12-21 20:02:56 · 590 阅读 · 1 评论 -
C++ 内存分配和new delete的使用
内存划分在C++中内存分为5个区,分别是堆、栈、全局/静态存储区、常量存储区和代码区。栈:保存局部变量。栈空间用来存放函数运行时的参数值和局部变量,当一个函数运行结束时,在这个函数中声明的局部变量也会自动销毁。栈的特点是无需人工管理但空间大小有限。堆:由malloc(C++程序员因避免使用)或者new运算符分配的内存。其生命周期由free(和malloc对应)或delete(释放new分配的空间)决定。堆中占用的空间在没有释放之前会一直存在,直到程序结束。堆的特点是自由度高,空间比较大,但程序员必须通转载 2022-02-23 11:00:42 · 498 阅读 · 0 评论 -
C++ vector在多线程操作中出现内存错误解决方案
C++ vector的reserve和resize详解reserve是容器预留空间,但在空间内不真正创建元素对象,所以在没有添加新的对象之前,不能引用容器内的元素。加入新的元素时,要调用push_back()/insert()函数。resize是改变容器的大小,且在创建对象,因此,调用这个函数之后,就可以引用容器内的对象了,因此当加入新的元素时,用operator[]操作符,或者用迭代器来引用元素对象。此时再调用push_back()函数,是加在这个新的空间后面的。vector在多线程中操作举例:有原创 2021-07-14 11:27:29 · 2783 阅读 · 0 评论 -
VSCode+CMake搭建C++编译调试环境-linux版
Visual Studio Code(简称VS Code)是一个由微软开发,同时支持Windows 、Linux 和 macOS 等操作系统的免费代码编辑器,在2019年的Stack Overflow组织的开发者调研中,VS Code被认为是最受开发者欢迎的开发环境。VS vode特点:开源,免费;自定义配置集成git智能提示强大支持各种文件格式(html/jade/css/less/sass/xml)调试功能强大各种方便的快捷键强大的插件扩展本文主要介绍在linux系统下,利用VSCo原创 2021-02-19 15:14:52 · 914 阅读 · 0 评论 -
Lambda 的语法
1. Lambda 的语法形式如下:[函数对象参数] (操作符重载函数参数) mutable 或 exception 声明 -> 返回值类型 {函数体}可以看到,Lambda 主要分为五个部分:[函数对象参数]、(操作符重载函数参数)、mutable 或 exception 声明、-> 返回值类型、{函数体}.示例:[] (int x, int y) { return x + y; } // 隐式返回类型[] (int& x) { ++x; } // 没有 return 语原创 2021-02-07 19:49:51 · 2776 阅读 · 0 评论 -
multimap和priority_queue的排序问题
multimap和priority_queue的默认排序问题两者默认的都是less模式,但1.multimap构造multimap<T1, T2>时,其实是有个默认的比较函数 multimap<T1, T2, less> ,即按key的升序排列2.priority_queue默认的也是less模式,但是大顶堆即降序排列定义:priority_queue<Type, Container, Functional>Type 就是数据类型,Container 就是容器原创 2021-02-07 13:17:11 · 583 阅读 · 0 评论 -
linux下利用cmake编译protobuf
protobuf也叫protocol buffer, 是google 的一种数据交换的格式,它独立于语言,独立于平台。google 提供了多种语言的实现:java、c#、c++、go 和 python,每一种实现都包含了相应语言的编译器以及库文件。由于它是一种二进制的格式,比使用 xml 、json进行数据交换快许多。可以把它用于分布式应用之间的数据通信或者异构环境下的数据交换。作为一种效率和兼容性都很优秀的二进制数据传输格式,可以用于诸如网络传输、配置文件、数据存储等诸多领域。protobuf在各种r原创 2021-01-26 20:37:54 · 3435 阅读 · 0 评论 -
二维vector的遍历方式和二维数组当函数参数的方式
1. 二维vector的遍历方式1.1 下标法#include <iostream>using namespace std;int main(){ vector<vector<int>> vec = { {1, 2, 3}, {4, 5, 6} }; for(int i = 0; i < vec.size(); i++) { for(int j原创 2020-12-11 10:36:20 · 2492 阅读 · 0 评论 -
C/C++ 一维,二维数组和二维vector初始化
vector的初始化有很多方式,在N维初始化时还会一些容易出现错误的地方。下面进行总结以下的总结均以int作为模板参数1.一维vector的初始化vector的构造函数通常来说有五种,如下:vector():创建一个空vector vector(int nSize):创建一个vector,元素个数为nSizevector(int nSize,const t& t):创建一个vector,元素个数为nSize,且值均为tvector(const vector&):复制构造函数v原创 2020-12-10 10:25:56 · 2446 阅读 · 0 评论 -
C/C++中数据存储方式和static关键字用法
对于一个完整的程序,在内存中的分布情况如下:【代码区】【全局数据区】【堆区】【栈区】,一般程序的由new产生的动态数据存放在堆区,函数内部的自动变量存放在栈区,静态数据(即使是函数内部的静态局部变量)存放在全局数据区。自动变量一般会随着函数的退出而释放空间,而全局数据区的数据并不会因为函数的退出而释放空间。1. 全局变量和static关键字当同时编译多个文件时,所有未加static前缀的全局变量和函数都具有全局可见性,即在其中一个文件中定义一个全局变量或函数,其他文件只要用extern 申明即可使用全局原创 2020-06-02 10:44:53 · 239 阅读 · 0 评论 -
C语言各种细节问题一
1. string 转 char *const char *c_str();c_str()函数返回一个指向正规C字符串的指针常量, 内容与本string串相同。这是为了与c语言兼容,在c语言中没有string类型,故必须通过string类对象的成员函数c_str()把string 对象转换成c中的字符串样式。c_str() 以 char* 形式传回 string 内含字符串,如果一个函数要...原创 2020-04-16 21:01:55 · 223 阅读 · 0 评论 -
ros中有关欧拉角和四元数互转的C++写法
1. 四元数转欧拉角包含的头文件:#include “tf2/LinearMath/Matrix3x3.h”tf2::Matrix3x3 mat(tf2::Quaternion( Imu_msg.orientation.x, Imu_msg.orientation.y, Imu_msg.orientation.z, Imu_msg.orientation.w ));mat.getEul...原创 2020-03-15 15:02:16 · 2365 阅读 · 0 评论 -
结构体变量和结构体指针的区别及pair的使用
C++ pair的使用pair是将2个数据组合成一组数据,当需要这样的需求时就可以使用pair,如stl中的map就是将key和value放在一起来保存。另一个应用是,当一个函数需要返回2个数据的时候,可以选择pair。 pair的实现是一个结构体,主要的两个成员变量是first second。pair包含两个数值,与容器一样,pair也是一种模板类型。pair<string, ...原创 2020-01-20 15:18:30 · 1454 阅读 · 0 评论