![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
c++
文章平均质量分 69
v俊逸
永远心怀感激,永远心存敬畏。
展开
-
qml和C++数据交互之QQmlListProperty以及两种创建方式。
两种方式,实现QQmlListProperty,从而在qml中可以给C++的类增加属性,或者将C++的QList数组作为Qml中的modeldata使用。原创 2023-02-22 10:49:47 · 1317 阅读 · 1 评论 -
mac m1设备上安装Qt并使用qt编程遇到的问题以及解决方式
图文手把手解决M系列处理器安装Qt以及编译问题。原创 2023-02-19 15:51:07 · 2148 阅读 · 0 评论 -
设计模式 - 如何在库和主程序之间互相调用数据和函数
如何设计一个能在App和Lib中互相调用的结构,使函数、变量能够通过这个结构互相调用。原创 2023-02-19 15:46:32 · 572 阅读 · 0 评论 -
《C++性能优化指南》 linux版代码及原理解读 第八章 使用更好的库
本章节大部分都是概念上的讲解,这里用最后的总结做本章的全部内容。原创 2022-06-16 16:24:17 · 182 阅读 · 0 评论 -
《C++性能优化指南》 linux版代码及原理解读 第七章 优化热点语句
本章主要通过介绍函数相关的开销以及不同的函数实现导致的开销,提醒我们在写函数的时候可以根据实际情况灵活的实现函数,从而提高程序的性能。原创 2022-06-16 16:06:13 · 401 阅读 · 0 评论 -
c++ shared_ptr:从循环引用导致内存泄漏到shared_ptr介绍再到析构流程分析
背景: 在以前的c++的申请内存中,一般是使用new/delete或者malloc/free这两对内存管理操作来实现,但是malloc和new却是有一些区别的,当使用malloc的时候,他是系统提供的函数,它会在堆内申请对应大小的内存,然后返回内存初始地址的一个void*的指针,而如果使用new的话,它是一个操作符,可以由编译器控制,所以在申请一个堆上内存的同时,还会调用所申请对象的一个默认构造函数,反过来,在释放内存的时候也是这样。在使用这种申请/释放内存机制时,就不可避免的会出现几个问题,..原创 2021-01-04 16:31:29 · 796 阅读 · 0 评论 -
c++ Vector之erase(导致迭代器失效)vector.erase源码解析
最近偶然遇到了一个问题,某个人和我聊的时候问我,c++的vector如果进行某个元素删除的话,有哪些方法,我给他列举了一个方法,#include <iostream>#include <vector>#include <stdio.h>template <typename T>void showvec(T& vec_){ for(auto &p:vec_) { std::cout<<p原创 2020-12-31 10:55:12 · 2321 阅读 · 0 评论 -
c++ 如何优雅的传递函数以及类成员函数
在一般的方法中,基本上传递函数都是通过传递函数指针的方式来实现。但是最近发现,频繁的传递函数、类成员函数不太是一个好的办法,所以在这里梳理一下常见的几种方法以及如何更方便的传递函数。如果是普通函数的话,一般这样#include <iostream>int add(int a, int b){ return a + b;}int main(){ int (*func) (int, int); func = add; std::cout << "func.原创 2020-10-21 14:52:05 · 5793 阅读 · 0 评论 -
QVTK 添加Sphere 设置SetRenderWindow
本想在Qvtk中添加一个图形,本想直接添加个图形进去就行了,但是我需要做一个鼠标交互事件,所以查阅资料之后发现需要使用到RenderWindow以及renderWindowInteractor来重新实现某些交互事件,所以我就将图形添加到actor中,然后actor加入到renderer中,最后使用QVTK的SetRenderWindow函数将其导向设置好的RenderWindow上,接下来正常显示。demo代码:#include "mainwindow.h"#include "ui_mainwi原创 2020-10-19 15:42:38 · 1413 阅读 · 0 评论 -
Qt捕捉窗口关闭事件
今天在Qt开发过程中遇到一个问题,本来我想在窗口关闭的时候将配置写入文件中,于是我将操作放入了默认的析构函数中,结果在窗口关闭之后,析构函数并不执行,所以我转而使用窗口关闭事件,来触发我想执行的操作。我写的类是继承自QWidget,class setting : public QWidget它所包含的默认的信号函数只有这几个:并没有我能用到的函数。从网上查找了一下,发现可以通过继承QWidget默认的虚函数closeEvent(QCloseEvent* event);来实现窗口关.原创 2020-10-09 10:35:14 · 3605 阅读 · 0 评论 -
PCD点云文件框选代码
背景:PCL + VTK项目地址:https://github.com/dezbracaty/PCD_Area_cut_tool后期添加其他功能maybe通过PVL_VISUALIZATION显示点云图像,然后通过按X进入框选模式,然后接受PCL::VISUALIZATION返回的点云索引,然后通过索引将所选择的点云文件导出。函数介绍:pcl::visualization::PCLVisualizer::Ptr viewer(new pcl::visualization::PC.原创 2020-09-24 09:56:59 · 792 阅读 · 0 评论 -
Windows C++ 多线程程序 c++17
环境: VS2017#include <iostream> #include <thread> #include <mutex> #include <memory> #include <vector> #include <algorithm> constexpr auto newl = '\n'; const std::unique_ptr<std::mutex> cout_mutex_ptr...翻译 2020-09-22 19:27:31 · 316 阅读 · 0 评论 -
Cmake编译pthreads报错:undefined reference to pthread_create
当使用Cmake编译多线程程序时,需要手动添加pthread库,如果手动添加,就会报错:undefined reference to `pthread_create'出现这个问题的原因是在链接阶段,函数对应的库文件搜索不到,找不到这个函数的具体实现。解决方式就是在Cmake文件中添加对应的库。这里需要指定的是Threads库,参考代码cmake_minimum_required(VERSION 3.16)project(ThreeWay_MulthThreadDemo)f原创 2020-06-24 23:38:29 · 6490 阅读 · 3 评论 -
Ros编程-tf::getYaw返回-nan的解决办法
首先看一下函数的使用方式:static inline double getYaw(const geometry_msgs::Quaternion& msg_q){ Quaternion bt_q; quaternionMsgToTF(msg_q, bt_q); return getYaw(bt_q);}原创 2020-06-12 14:20:57 · 3880 阅读 · 4 评论 -
Ros编程-undefined reference to `octomath::Pose6D::Pose6D解决办法
背景:报错信息如下:CMakeFiles/odompcl.dir/src/odompcl_node.cpp.o: In function `main':/home/allen/catkin_ws/src/odompcl/src/odompcl_node.cpp:18: undefined reference to `octomath::Pose6D::Pose6D(float, float, float, double, double, double)'/home/allen/catkin_.原创 2020-06-05 16:03:58 · 1320 阅读 · 0 评论 -
pcl::octree::OctreePointCloudSearch:pcl点云图临近点搜索 使用以及报错处理
Octreepointcloud search classMore...#include <pcl/octree/octree_search.h>Inheritance diagram for pcl::octree::OctreePointCloudSearch< PointT, LeafT, OctreeT >:Collaboration di...原创 2020-04-29 14:37:02 · 1890 阅读 · 0 评论 -
c++高斯分布函数normal_distribution介绍以及不随机问题解决办法
官方介绍:示例代码:// normal_distribution#include <iostream>#include <string>#include <random>int main(){ const int nrolls=10000; // number of experiments const int nsta...原创 2020-04-28 19:14:09 · 4591 阅读 · 0 评论 -
Eigen::Matrix矩阵转换
将Matrix3d转换至Matrix4d的几种方法:1:Eigen::Matrix3d R;// Find your Rotation MatrixEigen::Vector3d T;// Find your translation VectorEigen::Matrix4d Trans; // Your Transformation MatrixTrans.setIdenti...原创 2020-04-22 10:42:58 · 7179 阅读 · 0 评论 -
const在c++中的作用(
1、什么是const? 常类型是指使用类型修饰符const说明的类型,常类型的变量或对象的值是不能被更新的。(当然,我们可以偷梁换柱进行更新:) 2、为什么引入const? const 推出的初始目的,正是为了取代预编译指令,消除它的缺点,同时继承它的优点。 3、cons有什么主要的作用? (1)可以定义const常量,具有不可变性。 例如: con转载 2015-04-12 13:11:29 · 382 阅读 · 0 评论 -
《c++ primer》第二章--变量和基本类型
在c++中定义了一组表示整数、浮点数、单个字符和布尔值的算数类型,另外还定义了一种成为void的特殊类型,void 类型没有对应的值,尽在有限的情况下,通常用作无返回值函数的返回类型。算数类型的存储空间依机器而定,这里的存储空间指的是用来表示该类型的二进制位数,.。c++标准规定了每个算数类型的最小存储空间,但它并不组织编译器使用更大的存储空间。让存储具有结构的最基本办法就是用块处理存储,原创 2015-04-13 15:32:43 · 343 阅读 · 0 评论 -
用static声明的函数和变量小结
static 声明的变量在C语言中有两方面的特征: 1)、变量会被放在程序的全局存储区中,这样可以在下一次调用的时候还可以保持原来的赋值。这一点是它与堆栈变量和堆变量的区别。 2)、变量用static告知编译器,自己仅仅在变量的作用范围内可见。这一点是它与全局变量的区别。 A.若全局变量仅在单个C文件中访问,则可以将这个变量修改为静态全局变量,以降低模块间的耦合度; B.若全局转载 2015-04-21 23:33:54 · 2600 阅读 · 0 评论 -
C++中四种强制类型转换的区别
使用标准C++的类型转换符:static_cast、dynamic_cast、reinterpret_cast和const_cast。1、static_cast 用法:static_cast (expression) 该运算符把expression转换为type-id类型,但没有运行时类型检查来保证转换的安全性。它主要有如下几种用法: (1)用于类层次结构中基类和转载 2015-04-21 23:34:53 · 235 阅读 · 0 评论 -
《c++ primer》第四章--数组和指针
数组是c++中类似于标准库vector类型的内置数据结构,与vector相似,数组也是一种存储单一类型对象的容器,其中每个对象没有单独的名字,而是通过它在数组中的位置对它进行访问。与vector类型相比,数组的显著缺陷在于:数组的长度是固定的,而且程序员无法知道一个指定数组的长度。数组没有获得其容量大小的size操作,也不提供push_back操作在其中自动添加元素。如果需要更改数组的长度,程原创 2015-04-27 19:45:00 · 404 阅读 · 0 评论 -
c++的句柄
这个句柄只是从英文handle翻译过来的,只问句是什么意思难以解释,这个是我从别人的空间收集的信息,功能上的理解: 什么是"句柄"(handle),handle的本意是把柄,把手的意思。是你与操作系统打交道的东东。举个通俗的例子,比如你考上了大学,入学后,学校(操作系统)会给你一个学生证号。注意,这个号码是学校指定的,你无法自选。有了这个号码(学生证,假设转载 2015-06-05 23:49:16 · 818 阅读 · 0 评论 -
关于vs2013中const char*和LPCWSTR不兼容
今天在写关于文件操作的小程序时调用CreateFile函数,在第一个参数那里遇到了问题,HANDLE hFile= CreateFile("E : \ \ test . txt " , ........)结果碰上了这个问题,后来百度了一下问题所在,因为在vc6里面默认使用字符ANSII方式编码,而在vs2010及以上默认使用UNICODE方式编码,它们对一些字符所占内存空间的位原创 2015-07-31 13:08:10 · 5101 阅读 · 1 评论 -
《c++ primer》第五章--表达式
首先有一点非常重要,在关系操作符里面有 & & , | | , & , | 这么几个操作符,但是这几个有什区别呢?expr1 && expr2 //logical AND如果expr1是false,那么无论expr2 是什么,结果都是falseexpr1 || expr2 //logical OR如果expr1 是true,那么直接结果为true,不计算原创 2016-06-04 16:29:23 · 273 阅读 · 0 评论 -
c++函数重载
出现在相同作用域中的两个函数,如果具有相同名字而形参列表不同,就称为重载函数,注意,重载函数和返回值无关!!!在函数中局部声明的名字将会屏蔽在全局作用域内声明的同名名字。string init ( ) ;void func (){ int init =0; init is local and hides global initlstring s \init ();}原创 2016-06-07 08:08:16 · 259 阅读 · 0 评论 -
c++中函数的介绍(第七章)
函数内部的变量属于局部变量,只在调用函数这一段时间内有效,函数一旦执行完毕,其中的变量就会自动撤销,除非变量声明为static,或者在函数内部使用来自外部的引用,或者是指针。void swap1 ( int x,int y ){ x = x + y ;y = x - y;x = x - y;} // exchange x and y注意上面的函数,只是原创 2016-06-06 17:47:33 · 242 阅读 · 0 评论 -
《c++ primer》整理
为了解决命名空间污染这个问题,c++引入了“命名空间”这个概念。首先看一下这段代码:class_cplusplus_primer_Query{...};ifstream& cplusplus_primer_open_file(ifistream&,const string);如果想用增加名字长度来避免发生名字冲突,这无疑是一个zhuo办法。下面使用命名空间:namesp原创 2015-04-12 14:38:44 · 476 阅读 · 0 评论 -
const变量真的不能改变吗?
今天偶然看到内联汇编,里面有一个const和volatile的部分, 所以想写一个文章表达一下,const变量并不是不能修改的想法。首先看一段代码输出结果是从这里可以看出,这个地址没变,但是他的值确实是改变过, 同样的 ,const 指针 ,const 数组指针 都可以通过加一层指针来改变其数值。原创 2017-03-23 17:42:27 · 911 阅读 · 0 评论 -
狼 羊 渔夫过河问题
这几天碰到一个有意思的程序,讲的是狼 羊 白菜船夫要过河(从南岸到北岸), 结果每次船只能载船夫和一个东西 ,而且如果船夫不在场的话,狼会偷偷吃掉羊 ,羊会偷偷吃掉白菜 ,自己写一个算法求出可行的方案。。。首先我的想法是 ,用四个位表示这四个 ,然后位为0表示在南岸,1表示在北岸。先定义const int man=8; //1000const int wolf=4; /原创 2017-08-14 21:17:48 · 2494 阅读 · 0 评论 -
《c++ primer》第一章--快速入门
这章以一个书店管理系统为主线将,其中ISbn是国际标准书号的简写,后文略,其中每一笔交易形如这样0-201-70353-X 4 24.99第一个元素是ISbn,第二个是销售册数,最后是每本的单价。这个系统的目的是通敌每本书的销售册数,总收入以及平均售价。首先,每个程序都包含一个或者多个函数,而且必须有一个名为main的函数,函数由执行函数功能的语句序列组成,操作系统通过调用mai原创 2015-04-12 14:45:32 · 472 阅读 · 0 评论