C++
文章平均质量分 50
逍遥郎wj
凡读必记
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
代码内存分析神器-Massif Visualizer
不过只能用与linux。我猜微软也应该有自己的东西。原创 2025-05-23 16:04:47 · 766 阅读 · 0 评论 -
解决:undefined reference to `pcl::PCLBase<pcl::PointXYZ>::setInp
因为我在新建这个package包时,错将pcl_ros写成了rospcl。导致依赖包没有加载上。修改这个包的这个部分就好了。原创 2024-07-03 00:42:11 · 751 阅读 · 0 评论 -
return pt.array().template round().template cast<int>();
观察最后一个3,4,6,发现是取整四舍五入。原创 2024-04-01 17:34:51 · 344 阅读 · 0 评论 -
编译报错 undefined reference to `google::kLogSiteUninitialized‘ 的参考解决方法
完事在自己的CMakeLists.txt文件中,添加上这一句话:编译通过了。我试了很多种方法:包括重新编译安装gflags和glog等方法;1、重新安装gflags。2、重新安装glog。原创 2023-11-23 14:55:23 · 2123 阅读 · 0 评论 -
升级Cmake(不用卸载原有的版本)
2、解压、编译并安装到制定目录,修改环境变量。1、下载需要的(版本)[原创 2023-11-23 14:42:27 · 799 阅读 · 0 评论 -
C/C++ 中 volatile 关键字详解
而且读取的数据立刻被保存。在此段代码中,nMyCounter 的拷贝可能存放到某个寄存器中(循环中,对 nMyCounter 的测试及操作总是对此寄存器中的值进行),但是另外又有段代码执行了这样的操作:nMyCounter -= 1;//等待上面的线程终止,如果bStop不使用volatile申明,那么这个循环将是一个死循环,因为bStop已经读取到了寄存器中,寄存器中bStop的值永远不会变成FALSE,加上volatile,程序在执行时,每次均从内存中读出bStop的值,就不会死循环了。原创 2023-06-26 14:49:54 · 865 阅读 · 0 评论 -
C++笔记:虚继承
Animal下派生出Sheep和Tuo类。动物基类下,有两个派生类,一个是羊类,一个是驼类。这两个类都继承了Animal的一个属性,比如m_age。这样就导致资源的浪费,同时sheepTuo二义性。通过VS开发者工具中的工具,我们可以查看类的结构。解决方案:虚继承virtual。原创 2023-03-22 12:01:41 · 191 阅读 · 1 评论 -
C++笔记:指针转向(重新赋值)时的问题;重复释放;原地址遗漏释放;赋值运算符重载operator=;
指针转向时原空间内存释放。指针指向的地址,存在二次释放的风险,所以需要深拷贝。在堆中重新开辟一块空间,将指向的内容传入进去。原创 2023-03-19 23:59:11 · 833 阅读 · 0 评论 -
Qt安装与使用经验分享;无.pro文件;无QTextCodec file;Qt小试;界面居中;无缝;更换Qt图标;更换Qt标题。
Qt安装与使用经验分享;无.pro文件;无QTextCodec file;Qt小试;界面居中;无缝;更换Qt图标;更换Qt标题。原创 2023-03-05 09:42:14 · 2365 阅读 · 0 评论 -
【搬运】C++静态库与动态库
C++静态库与动态库转载 2022-09-24 16:35:53 · 271 阅读 · 0 评论 -
CMake入门(一)Ubuntu下使用和Window下使用
CMake跑起来。原创 2022-09-10 23:42:30 · 1438 阅读 · 0 评论 -
【特别注意事项】C语言解引用未初始化的指针
千万不要解引用未初始化的指针。原创 2022-08-11 23:46:08 · 928 阅读 · 0 评论 -
C语言与C++语言的一个区别:指针修改const变量
先上代码:const int a = 10;printf("a = %d\n", a);int* p = &a;*p = 100;printf("a = %d\n", a);这段代码在C语言中,可以正常运行。在C++中,会被告知int* p = &a;报错:const int *" 类型的值不能用于初始化 "int *" 类型的实体这段代码运行在以.c结尾的文件中可以通过,.cpp文件无法通过。结论:C语言允许通过指针修改const修饰的变量值。 C原创 2022-04-19 11:33:56 · 409 阅读 · 0 评论 -
C++ STL笔记十三:STL 常用算法六:常用集合算法;
算法简介:set_intersection // 求两个容器的交集。 set_union // 求两个容器的并集。 set_difference // 求两个容器的差集。set_intersection功能描述:求两个容器的交集函数原型:set_intersection(iterator beg1, iterator end1, iterator beg2, iterator end2, iterator dest); // 求两个集合的交集...原创 2022-02-16 22:10:31 · 190 阅读 · 0 评论 -
C++ STL笔记十三:STL 常用算法五:常用算术生成算法;
算术生成算法属于小型算法,使用时包含的头文件为 #include<numeric>算法简介:accumulate: // 计算容器元素累计总和。 fill: // 向容器中添加元素。accumulate:计算区间内容器元素累计总和函数原型:accumulate(iterator beg, iterator end, value); // 计算容器元素累计总和 // beg 开始迭代器 // end 结束迭代器 // v...原创 2022-02-16 18:32:07 · 312 阅读 · 0 评论 -
C++ STL笔记十三:STL 常用算法四:常用拷贝和替换算法;
算法简介:copy: // 容器内指定范围的元素拷贝到另一个容器中。 replace: // 将容器中指定范围的旧元素修改为新元素。 replace_if: // 容器内指定范围满足条件的元素替换为新元素。 swap: // 互换两个容器的元素。copy功能描述:容器内指定范围的元素拷贝到另一容器中。函数原型:copy(iterator beg, iterator end, iterator dest); // ...原创 2022-02-16 14:44:39 · 271 阅读 · 0 评论 -
C++ STL笔记十三:STL 常用算法三:常用排序算法;
算法简介:sort // 对容器内元素进行排序 random_shuffle // 洗牌, 指定范围内的元素随机调整次序。 merge // 容器元素合并,并存储到另一个容器中。 reverse // 反转指定范围的元素。sort功能描述:对容器内元素进行排序函数原型:sort(iterator beg, iterator end, _Pred); // 按值查找元素,...原创 2022-02-16 12:39:51 · 172 阅读 · 0 评论 -
C++ STL笔记十三:STL 常用算法二:常用查找算法;
STL中常用查找算法。原创 2022-02-15 21:54:21 · 778 阅读 · 0 评论 -
C++ STL笔记十三:STL 常用算法一:常用遍历算法;
STL-常见遍历算法 for_each和transform。原创 2022-02-15 21:24:21 · 289 阅读 · 0 评论 -
C++ STL笔记十二:STL 函数对象三:内建函数对象
内建函数对象原创 2022-02-15 09:41:20 · 539 阅读 · 0 评论 -
C++ STL笔记十二:STL 函数对象二:谓词
谓词:概念:返回值为bool类型的仿函数称为谓词; 要素一:必须是仿函数; 要素二:返回值类型为bool类型。 如果operator()接收一个参数,那么叫做一元谓词; 如果operator()接受两个参数,那么叫做二元谓词;一元谓词:// 一元谓词:只有一个参数,返回值为bool类型的仿函数。class GreaterFive{public: bool operator()(int val) { return val > 5; }};...原创 2022-02-15 08:22:21 · 242 阅读 · 0 评论 -
C++ STL笔记十二:STL 函数对象一
函数对象概念:重载函数调用操作符的类,其对象常称为函数对象。 函数对象使用重载的()时,行为类似函数调用,也叫做仿函数。本质:函数对象(仿函数)是一个类,不是一个函数。...原创 2022-02-14 23:08:36 · 445 阅读 · 0 评论 -
C++STL笔记十一:STL案例二
案例描述 公司今天招聘了10个员工(ABCDEFGHIJ),10名员工进入公司之后,需要指派员工在那个部门工作 员工信息有: 姓名 工资组成;部门分为:策划、美术、研发 随机给10名员工分配部门和工资 通过multimap进行信息的插入 key(部门编号) value(员工) 分部门显示员工信息 实现步骤 创建10名员工,放到vector中 遍历vector容器,取出每个员工,进行随机分组 分组后,将员工部门编号作为key,..原创 2022-02-11 22:06:10 · 554 阅读 · 0 评论 -
C++STL笔记十:map/multimap容器;
Key_Value结构的字典终于登场了。map/multimap简介:map中所有元素都是pair pair中第一个元素为key(键值),起到索引作用,第二个元素为value(实值) 所有元素都会根据元素的键值自动排序本质:map/multimap都属于关联式容器,底层结构是用二叉树实现的。优点:可以根据key键值快速找到对应的value值。map和multimap区别:map不允许容器中有重复key值元素 multimap允许容器中有重复key值元素...原创 2022-02-07 22:41:58 · 1125 阅读 · 0 评论 -
C++STL笔记九:set/multiset容器;构造函数;赋值;大小和交换;插入和删除;查找和统计;排序;对组pair;
集合容器:插入数据的同时,就自动完成了排序。所以也被称为关联式容器。 底层是由一个二叉树来实现的。set和multiset区别:set不允许容器中有重复的元素。 multiset允许容器中有重复的元素。调用时,包含头文件:include<set>构造函数: set<T> st; //默认构造函数: set(const set &st); //拷贝构造函数 赋值操作: set& operator=(const set &..原创 2022-02-07 22:35:23 · 453 阅读 · 0 评论 -
C++STL笔记八:list容器(三)案例:自定义类型数据排序
案例:按照年龄进行升序,如果年龄相同按照身高进行降序。class Person{public: Person(string name, int age, int height) { this->m_Name = name; this->m_Age = age; this->m_Height = height; }public: string m_Name; int m_Age; int m_Height;};void test01(){ li原创 2022-02-07 14:20:06 · 295 阅读 · 1 评论 -
C++STL笔记八:list容器(二)-接口函数;list构造函数;list赋值和交换;list大小操作;list插入和删除;list数据存取;list反转和排序
list构造函数函数原型:list<T> lst; // list采用模板类实现,对象的默认构造形式。 list(beg, end); // 构造函数采用区间拷贝,前闭后开[beg, end)区间中的元素。 list(n, elem); // 构造函数将n个elem拷贝给本身。 list(const list&lst); // 拷贝构造。void test01(){ // 默认构造 list<int>L1;...原创 2022-02-07 13:59:46 · 529 阅读 · 0 评论 -
C++STL笔记八:list容器(一)-list容器原理
之前接触到的数组以及vector,在内存上都是连续的。而链表list是一种物理存储单元上非连续的存储结构。数据元素的逻辑顺序是通过链表中的指针链接实现的。链表的组成:链表是由一系列结点组成。结点的组成:第一部分是存储数据元素的数据域; 第二部分是存储下一个结点地址的指针域。链表的实现方式:数组是在一片连续的物理内存空间中。而链表是由结点构成,每个结点的位置不一定连续,每个结点由两部分组成:一部分是数据域,用来存放我们实际要操作的数据,另一部分是指针域,指向下一个结点的地址.原创 2022-02-07 10:31:30 · 659 阅读 · 0 评论 -
C++STL笔记七:queue容器;
概念:Queue是一种先进先出(First In First Out,FIFO)的数据结构,它有两个出口。队列容器允许从一端新增元素,从另一端移除元素。队列中只有队头和队尾才可以被外界使用,因此队列不允许有遍历行为队列中进数据称为 --- 入队 push队列中出数据称为 --- 出队 pop构造函数:- `queue<T> que;` //queue采用模板类实现,queue对象的默认构造形式- ...原创 2022-02-07 09:14:24 · 161 阅读 · 0 评论 -
C++STL笔记六:stack容器;
概念:stack是一种先进后出(First In Last Out,FILO)的数据结构,它只有一个出口。生活中的栈:弹夹也是先入后出。坐地铁也是先进后出,后进先出。栈中只有顶端top的元素才可以被外界使用,因此栈不允许有遍历行为。栈中进入数据称为 --- 入栈 push栈中弹出数据称为 --- 出栈 pop进入和弹出的数据都是top位置的元素。只有top位置可以被访问,因此不支持遍历。构造函数: stack<T> stk; //stack采..原创 2022-02-06 17:28:05 · 883 阅读 · 0 评论 -
C++STL笔记五:STL案例一。
案例描述有5名选手:选手ABCDE,10个评委分别对每一名选手打分,去除最高分,去除评委中最低分,取平均分。实现步骤 创建五名选手,放到vector中 遍历vector容器,取出来每一个选手,执行for循环,可以把10个评分打分存到deque容器中 sort算法对deque容器中分数排序,去除最高和最低分 deque容器遍历一遍,累加总分 获取平均分 #include<iostream>#include<deque>.原创 2022-02-06 16:55:35 · 395 阅读 · 0 评论 -
C++ STL笔记四:deque容器;deque内部工作原理;deque构造函数;deque赋值;deque大小;deque存取;deque排序;deque插入删除
deque容器功能:双端数组,可以对头端进行插入删除操作。deque与vector区别:vector对于头部的插入删除效率低,数据量越大,效率越低。vector需要重新移动所有数据。 deque相对而言,对头部的插入删除速度会比vector快。deque容器头端也有开口。 vector访问元素时的速度会比deque快,这和两者内部实现有关。vector内部是一段连续的线性空间。而deque就不一样了。deque内部工作原理:deque两端是开放的,两端front和back各自提供两个原创 2022-02-05 21:47:14 · 700 阅读 · 0 评论 -
C++ STL笔记三:vector容器;vector构造函数;vector赋值;vector容量和大小;vector插入和删除;vector数据存取;vector互换容器;vector预留空间。
vector容器概述vector数据结构和数组非常相似,也称为单端数组。vector与普通数组的区别:数组是静态空间,而vector可以动态拓展。数组静态空间:数组在声明时即指定了大小。无法再改变。 vector动态拓展:并不是在原空间之后续接新空间,而是找更大的内存空间,然后将原数据拷贝到新空间中,释放原空间。 动态拓展机制:类似于C#种的ArrayList的Capacity拓展,当空间不足时,自动开辟。ArrayList会自动翻倍,但是vector不会翻倍,他会增加当前容量的一半.原创 2022-02-05 10:31:47 · 3680 阅读 · 0 评论 -
C++ STL笔记二:string容器;string构造函数;string赋值函数;string拼接;string查找、替换;string比较;string单个字符存取;string插入、删除、截取
本质:string是C++风格的字符串,而string本质上是一个类。string和char*区别:char*是一个指针 string是一个类,类内部封装了char*,管理这个字符串,是一个char*型的容器。特点:string类内部封装了很多成员方法。例如:查找find,拷贝copy,删除delete,替换replace,插入insert。string管理char*所分配的内存,不用担心复制越界和取值越界等,由类内部进行负责。string的构造函数:构造.原创 2022-02-04 12:05:03 · 376 阅读 · 0 评论 -
C++ STL笔记一:初识STL;容器;算法;迭代器;容器装数据
一:由来:长久以来,软件界一直希望建立一种可重复利用的东西。 C++的面向对象和泛型编程思想,目的就是复用性的提升。 面向对象:三大特点: 封装:将事物共有的特性(共性)抽离出来,封装为一个类,基于类具体化实例。从而提高复用性。物以类聚。 继承:子类继承父类。把父类的东西(属性、行为)都拿过来,子类不用再次重新声明一遍。也提高了代码的复用性。 多态:一个函数名称,有多个实现方式。根据调用的对象不同,产生不同的结果。不同的子类实例赋值给父类变量,来实现多态。也提高了代码复用性。原创 2022-02-01 22:36:28 · 1486 阅读 · 0 评论 -
C++模板笔记十:类模板案例:通用数组类
案例描述: 实现一个通用的数组类,要求如下: 可以对内置数据类型以及自定义数据类型的数据进行存储。 将数组中的数据存储到堆区 构造函数中可以传入数组的容量 提供对应的拷贝构造函数以及operator=防止浅拷贝问题 提供尾插法和尾删法对数组中的数据进行增加和删除 可以通过下标的方式访问数组中的元素 可以获取数组中当前元素个数和数组的容量 需求分析:一、类的基本结构:设计一个MyArray的类,类内属性为:类内维护一个数组:T*原创 2022-02-01 11:52:22 · 1709 阅读 · 0 评论 -
C++模板笔记九:类模板与友元
类模板配合友元函数的类内实现和类外实现。示例:通过全局函数来打印Person信息。全局友元函数类内实现:#include<iostream>using namespace std;// 通过全局函数 打印 Person信息。信息为私有权限,所以需要友元。template<class T1, typename T2>class Person{ // 全局函数 类内实现 friend void showPerson(Person<T1, T2>原创 2022-01-29 15:43:19 · 718 阅读 · 2 评论 -
C++模板笔记八:类模板分文件编写
问题:类模板中成员函数的创建时机:调用阶段。导致份文件编写时链接不到。解决:解决方案1:直接包含.cpp源文件。把include "Person.h"变为 include “Person.cpp”。 解决方案2:将声明.h文件和实现.cpp文件写到同一个文件中,并更改后缀名为.hpp,hpp是约定的名称,并不是强制。示例:头文件Person.h中代码:#pragma once#include<iostream>using namespace std;t原创 2022-01-29 11:12:58 · 3258 阅读 · 0 评论 -
C++模板笔记七:类模板成员函数类外实现;
类模板中的成员函数在类外实现。通常情况:类内实现。template<typename T1, typename T2>class Person{public: Person(T1 name, T2 age) { this->m_Name = name; this->m_Age = age; } void showPerson() { cout << "姓名:" << this->m_Name << ",原创 2022-01-28 17:25:08 · 1500 阅读 · 0 评论 -
C++模板笔记六:类模板与继承;
当类模板碰到继承时:注意以下几点:当子类继承的父类是一个类模板时,子类在声明的时候,要指定出父类中T的类型。明确T的类型。 如果不指定,编译器无法给子类分配内存。 如果想灵活指定父类中T的类型,子类也需变成类模板。如果不指定,那么子类中无法为继承来的成员分配内存,不知道类型,无法确定内存大小。解决办法:继承时,即指定类型。如果无法确定类型,或者想灵活处理,那么就需要将子类也写成一个类模板。总结:如果父类是类模板,子类需要指定出父类中T的数据类型。子类需要明确类型...原创 2022-01-28 17:10:02 · 2356 阅读 · 0 评论
分享