c++技术文章
文章平均质量分 63
神气爱哥
这个作者很懒,什么都没留下…
展开
-
rviz学习
今天学习rviz,实验了贺一家博士的《从0开始手写vio》课件中的生成模拟IMU数据这一章节,代码如下:/* * Copyright (c) 2010, Willow Garage, Inc. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following原创 2021-09-19 18:01:05 · 478 阅读 · 0 评论 -
牛顿下山法
牛顿下山法计算高次方程真是利器啊,举个栗子#include #include #include double f(double x){return pow(x, 3) + pow(x, 2) + 2;}double f1(double x){return 3 * pow(x , 2) + 2 * x;}int main()原创 2016-03-17 16:26:38 · 1311 阅读 · 1 评论 -
C++怎样把第三方库隐藏在实现下面
相信在做项目过程中,大家肯定会用一大堆开源库,笔者就曾经用到了BOOST、PCL、GDAL、OPENCV、GEOS等等。有时候甚至会更换某个开源库(效率问题或其他原因),甚至是编译太慢(为了智能指针就弄个BOOST进来未免大材小用了),如果能把第三方库隐藏在你自己的类下面那是再好不过了(它对你整个工程的影响只是这个类而已)。可以使用pimpl技术,其实就是个适配器,举个栗子:geometr原创 2016-03-17 16:39:36 · 1543 阅读 · 0 评论 -
C++如何简单的实现内存池
假如遇到频繁申请释放、频繁释放内存的情况,即使一次申请的内存很少,释放的也很及时,但是我们知道操作系统分配内存并不是连续的,如果频繁申请会在内存中产生许多碎片,因此在程序运行比较长的时间后,占用的内存就会非常大,甚至导致内存不足崩溃。解决办法就是原创 2016-11-28 14:23:23 · 674 阅读 · 0 评论 -
证明AX=0的最小二乘解是ATA最小特征值对应的特征向量
坑爹的,csdn没法编辑公式,我只能在word上写好截图了。因此,如果能构造AX=0,则最小二乘解就直接求ATA的最小特征解就可以了,这里举一个平面拟合的例子:假如有一束点云,如何从点云里把平面求出来。啥也不说了,上代码吧:Bool ComplanationFit(Navinfo::Engine::Geometries::Coordinate *pPoints, Int原创 2017-02-10 17:16:49 · 8827 阅读 · 3 评论 -
线性拟合小结
问题:有下图所示的散点,想要拟合一条直线尽量拟合散点的走向有很多方法可以办到 ,这里对多种方法进行一下总结:最小二乘法问题可简化成求一条直线: 使 y(i)梯度下降法PCASVD原创 2017-07-21 11:45:20 · 1490 阅读 · 0 评论 -
ros跑通orbslam2遇到的问题
主要参照两个博客:ROS Kinetic安装ORBSLAM2安装在安装中遇到些问题1、安装kinetic失败sudo apt-get install ros-kinetic-desktop-full执行此命令,很快就结束了,我还以为我的网速快呢,原来是公司把端口给限制了,opt下面根本什么都没有,搬回家里运行了2个小时终于装完了。2、编译ORB_Slame2会遇到error: ‘uslee原创 2018-01-15 10:51:38 · 2093 阅读 · 0 评论 -
osg实现正交视图控制器
osg中没有正交视图的控制器,但是我们经常会遇到2D的项目应用,我也不知道如何申请成为osg社区的会员,就写在这里,以免忘掉,拿去不谢.#ifndef OSGGA_ORTHO_MANIPULATOR#define OSGGA_ORTHO_MANIPULATOR 1#include #include #include #include "osg_export.h"names原创 2018-02-05 11:18:41 · 2442 阅读 · 2 评论 -
Jenkins+svn+MSBuild自动编译VC工程
Jenkins是一个优秀的持续集成工具,本文介绍如何搭建VC工程自动编译系统1.新建一个自由风格的软件项目2.源码管理:填写svn地址,用户名密码3.安装msbuild msbuild不是默认自带的,需要安装,打开Jenkins->系统管理->管理插件->可选插件 选择msbuild安装4.配置msbuild 打开Jenkins->系统管理->全局工...原创 2018-02-25 10:57:51 · 3896 阅读 · 0 评论 -
利用vs2017 CMake开发跨平台C++项目实战
对于windows程序员来说,在linux上开发C++程序会非常困难,一来没用过makefile,其语法非常生涩难懂,二来vs之外的IDE,其易用性与vs相差甚远,宇宙第一IDE不是盖的。致使C++不同于其他编程语言,硬生生催生出Windows程序员和Linux程序员两个群体,直到有了CMake。 常用开源库的同学想必对CMake非常熟悉,它可以在Linux上可以自动...原创 2019-01-16 16:01:28 · 37463 阅读 · 5 评论 -
C++使用模板并隐藏实现
我们在用C++模板的时候,通常要把实现写在头文件里,如果项目中模版很多的时候,会造成编译速度很慢,如果你用过boost的话,你就深有体会了。为了使用模板并隐藏实现从而加快编译速度,或者是其他的一些不可告人的目的(我怎么能拿这么黑暗的思想揣摩程序员)。这里介绍一个好方法,是借鉴了PCL(point cloud library)中的实现。template_export_class工程原创 2016-03-17 16:02:43 · 3440 阅读 · 0 评论 -
C++使用模板特化实现工厂模式
许多C++程序员使用简单工厂创建自己的对象,这时就会有很多这样的分支,比如:class Staff{virtual double salary() = 0;//薪酬}class Engineer : public Staff;//举个栗子,不写实现了class Leader : public Staff;class Saler : public Staff;原创 2016-03-17 16:17:15 · 1942 阅读 · 0 评论 -
auto_ptr、shared_ptr、weak_ptr、scoped_ptr用法小结
auto_ptr auto_ptr是现在标准库里面一个轻量级的智能指针的实现,存在于头文件 memory中,之所以说它是轻量级,是因为它只有一个成员变量(拥有对象的指针),相关的调用开销也非常小。 下面的代码来自于VC++ 8.0里面的源码: 里面有个auto_ptr_ref的数据结构,我们可以把它忽略,这个只是内部使用的代理结构,用于一些隐式的const变化原创 2012-05-10 18:14:21 · 12559 阅读 · 1 评论 -
vector :: erase 出错问题
转载自 sicceer最终编辑 sicceervector::erase():从指定容器删除指定位置的元素或某段范围内的元素vector::erase()方法有两种重载形式如下:iterator erase( iterator _Where);1.iterator erase( iterator _First, iterator _Las转载 2012-05-10 18:18:55 · 5402 阅读 · 0 评论 -
浅谈C++中句柄的使用
我想在此将我新学的句柄类做个小结,就我个人理解,C++句柄类的主要目的是在对象层面上实现多态。比如:Class A{public:A(){}~A(){}virtual void func(){printf("A";}};Class B:public A{public:B(){}~B(){}void func(){printf("B";原创 2012-05-12 11:25:38 · 10120 阅读 · 0 评论 -
关于C++头文件互相包含对程序员的一点建议
今天下午偶然发现一个错误,比如a.h中有#include"b.h" 且b.h中有#include"a.h"这样的情况出现时,编译器报找不到类型的错误语法错误: 缺少“;”(在“*”的前面)缺少类型说明符- 假定为int。注意: C++ 不支持默认int等等等等起初以为是头文件重复包含的原因,企图以#ifndef #define #endif解决,结果无效,后来才知道原创 2012-06-01 16:58:11 · 1833 阅读 · 1 评论 -
c++ 实现委托
C++实现delegate机制class Sdk{public: void DoSomething(); };class client{public: Sdk m_sdk; void DoSomething{} { m_sdk.DoSomething(); } void OnMessa转载 2012-05-14 11:03:30 · 774 阅读 · 0 评论 -
C++利用宏实现反射和运行时类型检测
我们知道,C++是没有反射机制的,很多程序员在用C++时遇到此问题也是挠头不已,下面,我就仿照《深入浅出MFC》中的动态生成一节定义自己的宏实现反射和运行时类型检测一、首先,定义一个运行时结构体,我把它起名为CMyRuntimestruct CMyRuntime{std::string m_lpcstrClassName;CMyRuntime* m_pBaseClass;原创 2012-06-02 11:09:49 · 3957 阅读 · 2 评论 -
vector用erase删除元素时,为什么被删元素的析构函数会被调用更多次?
vector::erase的原型如下:iterator erase(iterator position);iterator erase(iterator first, iterator last);对应的相关说明如下:"...This effectively reduces the vector size by the number of elements re转载 2012-07-06 10:11:28 · 1569 阅读 · 0 评论 -
c++逐行读取写入txt文件的方法
/*该程序从文件main.txt文件中着行读取字符存放在s中并打印s*/#include#include#includeusing namespace std;void main(){ifstream in("main.txt");string s;while(getline(in,s))//着行读取数据并存于s中,直至数据全部读取cout}原创 2012-11-23 17:17:46 · 56665 阅读 · 1 评论 -
windows下如何做软件崩溃前提示界面
windows API有一个函数SetUnhandledExceptionFilter可以在程序崩溃之前捕获崩溃事件,它接受一个函数指针参数,我们可以利用它进行诸如崩溃前数据保存、记录日志,或者是重启等。在系统初始化后,注册崩溃捕获函数SetUnhandledExceptionFilter((LPTOP_LEVEL_EXCEPTION_FILTER)ApplicationCrashHand原创 2015-10-22 09:29:07 · 890 阅读 · 0 评论 -
Eigen最小二乘法拟合三次曲线
用osg做了可视化验证,交互点都存在v3d中了,用了三次曲线作为曲线方程,即y= ax3 + bx2 + cx + d,以一组观测值x,y序列去求未知数a,b,c,d,当然观测个数必须大于4#include #include #include #include #include "OrthoManipulator.h"#include using namespa原创 2016-03-17 15:49:39 · 5779 阅读 · 0 评论 -
浅谈char* 与char[]的区别
很多C++程序员都会被char*与char[]所困惑,从表面上看char*是一个指向char的指针,char[]是一个char类型数组,而且它们都可以这样赋值:char* a="12345";char[10] b="12345";但实际上给a b分配的内存是完全不一样的,给a分配的内存是处于静态存储区的,而给b分配的内存是处于栈上的,我们知道静态存储区存储的都是常量,是不能被更改的。原创 2012-05-12 10:47:08 · 812 阅读 · 1 评论