c++
文章平均质量分 85
potxxx
>_<
展开
-
c++编程基础(零)—— 知识点小结
c++知识点小记使用assign(仅顺序容器)vector<char> c; vector<int> i;i.assign(c.begin(),c.end()); //不同类型元素的替换使用swap使用swap元素不会真正移动。对于string会导致指针失效,对于array会真正交换元素;使用insertvector<...原创 2018-06-23 14:39:01 · 1257 阅读 · 0 评论 -
win10+vs2015+DBoW3编译以及加载&LNK2019问题解决
之前一直编译的是orb-slam2内自带的DBow2,现在重新学习一下DBoW3的使用(更快的速度以及更好的封装)。首先从编译开始:下载DBoW3源码:https://github.com/rmsalinas/DBow3首先解压后在目录里新建一个build目录:打开cmake输入源码地址(解压后的目录)与build目录(刚才建的):首先点击configure,然后指定一...原创 2019-02-27 15:56:14 · 1641 阅读 · 0 评论 -
c++并发编程(三)——在线程间共享数据 mutex
c++标准提供的保护共享数据的最基本机制是互斥元(mutex)。std::mutex my_mutex;void fun() { my_mutex.lock(); //互斥元加锁 do_something(); my_mutex.unlock(); //互斥元解锁}void fun2() { std::lock_guard<std::mu...原创 2019-02-18 15:10:05 · 453 阅读 · 0 评论 -
C++错误:C4996
使用vs2015编译出现错误:error C4996: 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.原因:...原创 2019-02-18 16:26:02 · 7317 阅读 · 0 评论 -
c++并发编程(四)——同步并发操作 condition_variable&future
c++标准库提供条件变量以及期值等工具来等待事件以及简化操作的同步。std::this_thread::sleep_for(std::chrono::milliseconds(100)); //当前线程休眠100毫秒使用std::condition_variable条件变量等待数据int data_num = 10; std::queue<int>...原创 2019-02-18 20:04:49 · 385 阅读 · 0 评论 -
c++并发编程(五)—— 原子类型与原子操作 atomic
原子操作是一个不可分割的操作,标准c++中通过原子类型来获得原子操作。从一个简单的例子来看看使用原子类型的作用:std::atomic<int> sum = 0; //int sum = 0;void fun(){ for (int i = 0; i<100000; ++i) sum ++; //使用原子类型对sum的...原创 2019-02-20 16:14:12 · 1927 阅读 · 0 评论 -
c++并发编程(七)—— 线程中断
有些线程是作为长时间工作的,其运行函数内部都会有个无限循环,但是某些时候我们希望能够主动停止线程:如人为停止或某一条件满足后退出。这里我们首先看看一个简单的思路:要想从一个线程终止另外一个线程,我们可以设置一个flag,这两个线程均可以访问的到,于是需要被中断的线程只需要检测这个flag的状态是否被改变,并由此作出是否中断的决定。这里是一个例子:class thread_class ...原创 2019-02-26 10:52:14 · 6990 阅读 · 0 评论 -
DBoW3库的使用
之前我们有讲过DBoW3库的编译与安装,这篇我们来谈谈DBoW3库的使用。在这之前建议先看看视觉词袋与DBoW库的原理,这个博主写的不错:https://blog.csdn.net/qq_24893115/article/details/52629248一、使用词典我们知道离线视觉词典实际就是将特征描述子集合聚类。训练离线词典://输入特征描述子集合std::ve...原创 2019-03-05 20:17:35 · 7216 阅读 · 6 评论 -
c++编程基础(四)——内存管理
c++作为c的扩展相比于java这种语言更接近底层,不可避免的需要对内存进行管理,这既是一个优点更是一个缺点。给了程序员更多的内存管理手段可以写出效率更高的程序,但对内存处理时需要注意的更多,因为出错的概率会更大。这篇我们简单介绍下c++的内存管理。在c++中内存主要分为5个存储区:栈(Stack):局部变量,函数参数等存储在该区,由编译器自动分配和释放.栈属于计算机系统的数据结构,进...原创 2019-03-05 00:12:28 · 264 阅读 · 0 评论 -
常用算法思想(三)——动态规划
作为一个程序员,动态规划是要会的,不然怎么找工作呢(哈哈)。动态规划作为普通程序员面试时的一个必考点也是一个难点,早就听闻它的大名,但是我们不用太过高看它,慢慢分析学起来也是很容易的~1、什么是动态规划?动态规划是求解决策过程最优化的数学方法。把多阶段过程转化为一系列单阶段问题,利用各阶段之间的关系,逐个求解,创立了解决这类过程优化问题的新方法——动态规划。可以看到动态规划问题有几个特...原创 2019-03-05 01:34:26 · 429 阅读 · 0 评论 -
win10+vs2015+openMVG编译与MSB3073问题解决
首先下载源码:https://github.com/openMVG/openMVG看看官方给的win编译步骤:注意需要使用上面第一个这个命令下载源码,不然cmake过程会出错接着打开cmake-gui,勾选附加库(如果你编译过这些第三方库)并修改install目录(默认会安装到c盘)最后进入到vs里(注意需要右键点击以管理员方式打开vs,不然生成install时会出错MSB...原创 2019-03-09 10:47:09 · 848 阅读 · 0 评论 -
浅析C++中STL容器与其数据结构
如果写c++程序那么STL容器是不可避免要使用的,而正确合理地使用这些容器才能够简化我们的程序、提高运行的效率,所以这篇我们就来简单介绍下STL容器内部的故事。一、顺序容器顺序容器:是一种各元素之间有顺序关系的线性表,是一种线性结构的可序群集。顺序性容器中的每个元素均有固定的位置,除非用删除或插入的操作改变这个位置。顺序容器的元素排列次序与元素值无关,而是由元素添加到容器里的次序决定。...原创 2019-02-24 17:21:35 · 1731 阅读 · 0 评论 -
常用算法思想(二)——回溯法
回溯法思路的简单描述是:把问题的解空间转化成了图或者树的结构表示,然后使用深度优先搜索策略进行遍历,遍历的过程中记录和寻找所有可行解或者最优解。求解步骤1)针对所给问题,定义问题的解空间;2)确定易于搜索的解空间结构;3)以深度优先方式搜索解空间,并在搜索过程中用剪枝函数避免无效搜索。常用的剪枝函数:用约束函数在扩展结点处剪去不满足约束的子树;用限界函数剪去得不到最优解的子...原创 2019-02-27 09:53:33 · 287 阅读 · 0 评论 -
NLopt优化库在c++下的使用
NLopt在windows下的安装以及vs下的include可以参考其他博客,本文主要记录nlopt示例程序的c++使用。数学模型如下:目标函数求最大值,约束函数为后两行;#include"nlopt.hpp"using namespace nlopt;使用c++接口首先包含.hpp文件,相应的接口名均在nlopt命名空间里。/*******************************...原创 2018-06-20 15:14:49 · 6453 阅读 · 0 评论 -
c++编程基础(一)——一文带你了解c++源码到可执行文件的编译过程
前言 作为一个非科班出身的程序员,开始学习c++当然是从使用宇宙第一IDE——vs开始:创建个工程,写个HelloWorld.cpp,点击那个绿色的三角。OK,一个简单的程序就写好了,也不过如此嘛,这就是我最初的想法,当然那时埋下的隐患,也让我慢慢尝到了苦果,尤其是当你需要重新编译第三方库的时候,各种问题层出不穷(众所周知相比于其他主流语言java、python之流,c++加载第三方库到目前...原创 2019-02-05 17:50:29 · 607 阅读 · 0 评论 -
c++中char转换为string类型
写程序遇到一个Bug如下:char x = 'a';string str(x); //这里报错了当时就有点蒙了,查了下string的构造函数:string(); string (const string& str);string (const string& str, size_t pos, size_t len = npos);s...原创 2019-02-14 19:07:50 · 64165 阅读 · 9 评论 -
c++编程基础(二)——Makefile与cmake入门
在上一篇我们讲了c++编译的过程,如果对g++命令了解过你会知道每次我们想要编译一个程序,就需要每次都写一大段命令行来指定我们想要的编译情形(多文件编译,不同的文件编译顺序,库的加载,编译结果的类型等等),类似于这种:上图是win下cl编译器的命令行(这也是vs帮我们隐藏住的细节,g++也是类似)那么每次都让我们写这一大段未免太麻烦了,于是可以很快想到——我们把这段写...原创 2019-02-06 12:45:43 · 8871 阅读 · 1 评论 -
c++编程基础(三)——vscode编程环境
相信大多数人学习c++从vs开始,作为宇宙第一ide(严肃脸)毫不过分的讲它该有的功能都有了,还有更多(相信我你用到的功能只占小部分)的功能我们并不会用上。而且vs占用的资源越来越大————vs2017只是简单装装编写c++的功能也有11G+,更令人不适的一点是每次启动vs需要等待好久(没有进度条的呦),有时我们只是想写个小的程序不过百行(小的脚本,算法题啥的),这时使用vs就有点大材小用的感觉...原创 2019-02-06 14:00:49 · 744 阅读 · 0 评论 -
c++并发编程(六)—— 基于锁的并发数据结构设计
在我们进行并发编程的时候,如果多线程使用到了数据结构,那么程序设计过程中需要保证此数据结构的正确同步。有两种方法:1、选择单独的互斥元与外部锁来保护数据2、设计一个可以同时访问的数据结构其中前几节我们涉及到了第一种方法,现在我们重点描述下第二种方法。使用锁和条件变量的线程安全队列template<typename T>class threadsafe_queue...原创 2019-02-25 20:18:12 · 485 阅读 · 0 评论 -
c++并发编程(一)—— hello,thread
前言之前一直使用pthread作为c++的线程库,现在有空了来了解一下c++标准线程库。为什么需要并发?为了划分关注点而使用并发 为了性能的提升使用c++标准库的并发支持c++11标准发布带来了标准c++线程库,包含了用于管理线程<thread>、保护共享数据<mutex>、线程间同步操作<future、condition_variable>...原创 2019-02-17 13:38:29 · 250 阅读 · 0 评论 -
c++并发编程(二)——管理线程 thread类
启动线程同上节所讲,线程是通过构造std::thread对象来开始的:void do_some_work();std::thread my_thread(do_some_work);使用可调用类型:#include<iostream>#include<thread>class func {public: void operator()() ...原创 2019-02-17 20:03:38 · 339 阅读 · 2 评论 -
常用算法思想(一)——分治法
“分而治之”( Divide and conquer)方法(又称“分治术”) ,是有效算法设计中普遍采用的一种技术。所谓“分而治之” 就是把一个复杂的算法问题按一定的“分解”方法分为等价的规模较小的若干部分,然后逐个解决,分别找出各部分的解,把各部分的解组成整个问题的解,这种朴素的思想来源于人们生活与工作的经验,也完全适合于技术领域。诸如软件的体系结构设计、模块化设计都是分而治之的具体表现。...原创 2019-02-22 18:50:23 · 2035 阅读 · 0 评论 -
win10+vs2015+libtiff编译流程
需要在win平台上使用libtiff,网上搜了很多教程都是比较老的方法,这里提供一个现在可以很简便的方法。按照惯例下载源码在这里:http://download.osgeo.org/libtiff/选一个比较新的版本,我使用的是tiff-4.0.10。解压后你会发现已经提供了cmakelist.txt这样就可以按照cmake编译的方式编译这个库了:vs工程内批生成就可以...原创 2019-03-09 15:55:03 · 2233 阅读 · 0 评论