C++
zhubaohua_bupt
这个作者很懒,什么都没留下…
展开
-
map下标操作和insert区别
map的insert和下标操作都可以用作添加元素,但两者有区别。特别是下标操作,需要特别注意。1insertinsert接受一个pair参数,并且返回值也是一个pair。返回值pair中的first元素是一个迭代器,如果数据插入成功,则返回插入关键字位置,用->解引用可以提取pair类型元素。second成员是一个bool类型变量,如果关键字已在map中,insert什么也不做,s原创 2017-03-14 09:26:53 · 2835 阅读 · 0 评论 -
c++thread学习(3)并发多线程系统开发过程
在实现一个规模较大的工程时,需要多个线程之间互相传递数据,因此,点对点的通信机制已经不能满足需要,设定一个比较合理的通信架构会提高工程开发、维护的效率以及代码的复用性,可读性。了解ROS的小伙伴都知道,ROS的通讯是 节点——话题——节点 的方式。每个节点代表一个线程,每个话题是一块通信数据内存,线程之间的通讯通过话题这个“中介”传递(消息)。线程之间的通信方式是,生产者(节点)发布消原创 2017-06-08 16:07:51 · 684 阅读 · 0 评论 -
指针的大小是谁决定的
本文转自http://blog.sina.com.cn/s/blog_4fd9844201010n3v.html应该说这是一个非常基础的问题,教科书上说指针大小和机器字长相同,即32位机指针长度为4字节!但是对不对呢?为什么是这样? 搜了一下相关资料。。。居然发现回答不统一,很多人也同样是糊里糊涂。下面对这个问题做一个系统的整理和分析: 首先,介绍几个基本概念:转载 2017-06-22 10:19:28 · 382 阅读 · 0 评论 -
Canny边缘检测原理与C++实现(2)实现部分
本代码实现完全脱离opencv,如果需要显示,可以调用,以便观察检测效果。原创 2017-06-28 14:43:38 · 1338 阅读 · 2 评论 -
C++ 数字、string和char*的转换
C++ 数字、string和char*的转换原创 2017-04-11 16:26:37 · 10639 阅读 · 3 评论 -
c++虚基类在内存中的分布
本文转自http://www.cnblogs.com/cy568searchx/p/3688215.html今天重温C++的知识,当看到虚基类这点的时候,那时候也没有太过追究,就是知道虚基类是消除了类继承之间的二义性问题而已,可是很是好奇,它是怎么消除的,内存布局是怎么分配的呢?于是就深入研究了一下,具体的原理如下所示:在C++中,obj是一个类的对象,p是指向obj的指针,该类里面有转载 2017-08-03 14:19:18 · 1604 阅读 · 2 评论 -
c++单继承、多继承、菱形继承的内存布局(虚函数表结构)
单继承:只有一个基类和一个派生类class Base{public: virtual void fun1() { cout "Base::func1()" << endl; } virtual void fun2() { cout "Base::func2()" << endl; }private:转载 2017-08-11 10:10:43 · 999 阅读 · 1 评论 -
typedef函数指针用法
1.简单的函数指针的应用形式1:返回类型(*函数名)(参数表) [cpp] view plain copychar (*pFun)(int); char glFun(int a){ return;} void main() { pFun = glFun; (*pFun)(2)转载 2017-01-03 10:22:54 · 468 阅读 · 0 评论 -
sizeof
今天看《程序员面试宝典》一书(为了应付将要到来的微软笔试),看到了sizeof(string)这个问题。在Dev C++上测试的结果是4,很不明白。上网搜了一下,得到如下结果:string strArr1[]={"Trend", "Micro", "Soft"};sizeof(strArr1)=12转自:http://apps.hi.baidu.com/shar转载 2017-08-21 19:27:15 · 411 阅读 · 0 评论 -
Eigen 使用参考
from:http://eigen.tuxfamily.org/dox/AsciiQuickReference.txtEigen 矩阵定义#include<Eigen/Dense> Matrix<double,3,3>A;//Fixedrowsandcols.SameasMatrix3d....转载 2018-01-29 16:13:26 · 804 阅读 · 0 评论 -
share_ptr使用注意事项
智能指针可以提供对动态内存安全而又方便的管理,但这建立在正确使用的前提下。为了正确使用智能指针,我们必须坚持一些基本规范。1 避免同一块内存绑定到多个独立创建的shared_ptr上,因此要不使用相同的内置指针初始化(或reset)多个智能指针,不要混合使用智能指针和普通指针,坚持只用智能指针。2 不delete get() 函数返回的指针,因为这样操作后,shared_ptr并不知道它管...原创 2018-08-05 14:16:26 · 4901 阅读 · 2 评论 -
c++ map 使用自定义结构做关键字
map在STL中的定义template , class Alloc = alloc> 第一个参数Key是关键字类型第二个参数T是值类型第三个参数Compare是比较函数(仿函数)第四个参数是内存配置对象map内部存储机制实际是以红黑树为基础,红黑树在插入节点时,必须依照大小比对之后在一个合适的位置上执行插入动作。所以作为关键字,起码必须有“在选择map的关键字时,注意以转载 2017-03-14 08:46:33 · 8576 阅读 · 0 评论 -
c++thread学习(2) 线程之间通信的一种方式
以下内容讲的是这样一个例子:现有类A和类B,其结构如下所示:class AorB:{ .... 一些数据成员和成员函数; .... dataType data; 主函数 process(dataType& data,...);//data需要其他线程送入,而且根据系统需求,只要data更新,process便执行一次。};现在我们想让类A和类B在开启线程原创 2016-12-19 10:52:16 · 9968 阅读 · 0 评论 -
const的用法
const用法详解面向对象是C++的重要特性. 但是c++在c的基础上新增加的几点优化也是很耀眼的就const直接可以取代c中的#define以下几点很重要,学不好后果也也很严重const1. 限定符声明变量只能被读 const int i=5; int j=0; ... i=j; //非法,导致编译错误 j=i; /转载 2016-07-25 16:30:08 · 472 阅读 · 0 评论 -
数字字符串转换成算数类型函数atoi(),分解字符串的函数strtok()的简单应用
#include #include #include#includeusing namespace std;int main(){string buff ="55 22 6688 99 55";char *buf= (char*)buff.c_str();//string转换char*char *ptr = strtok(buf, " ");//分解字符串的函数 第一个参数为 c原创 2016-07-13 20:08:47 · 1219 阅读 · 0 评论 -
学习linux之 cmake(1)
一个高级程序从编写到被执行会经历哪些过程呢?这和很简单,了解编译原理的同学都知道,高级程序最终是要被转化成机器理解的机器代码的,这样才能被机器理解执行。这个过程可以粗略的分为 源代码(编译)-->目标代码(链接)--->可执行程序在IDE环境下开发软件,我们只需编写好源文件、头文件、告诉IDE我们依赖的第三方头文件路径、库文件全路径,然后剩下的就交给IDE来完成这个所原创 2016-10-09 09:06:20 · 867 阅读 · 0 评论 -
学习linux之 gcc/g++常用的命令行编译指令
1. gcc -E source_file.c-E,只执行到预编译。直接输出预编译结果。2. gcc -S source_file.c -S,只执行到源代码到汇编代码的转换,输出汇编代码。3. gcc -c source_file.c-c,只执行到编译,输出目标文件。4. gcc (-E/S/c/) source_file.c -o output_filenam原创 2016-10-09 10:36:45 · 31676 阅读 · 3 评论 -
嵌套类的参数传递
在工程可能会遇到这样一个情况,底层的类需要main函数中传参数。但是考虑到系统功能的设计,底层的类又不能直接定义在main函数中,因为底层的类是嵌套在顶层的类里面的,实现相应的功能需要顶层的类的中间结果。 这个时候我们怎样实现把main函数中的参数传给底层的类呢?下面来看一个例子:为了简单起见,我一共写了两个简单的类,一个是类A,为顶层类、另一个是类B,为底层类。classA.h#原创 2016-10-10 17:37:33 · 670 阅读 · 0 评论 -
c++thread学习(1)
现在我们有一个这样的问题:对一个初始数据A的处理我们能分为两个步骤:步骤1 :把数据A处理成中间数据B,,需要2s。步骤2:把中间数据B处理成最终数据C,需要3s。如果我们写一个单线程的函数,即顺序执行,那么每处理一个数据需要5s。现在我们想对数据处理进行提速:能否缩小处理数据的处理时间?于是我们想到了多线程。即:设计两个线程th1,th2,th1处理第一步,th2原创 2016-10-21 14:23:55 · 509 阅读 · 0 评论 -
函数对象
一个函数对象,即一个重载了括号操作符“()”的对象。当用该对象调用此操作符时,其表现形式如同普通函数调用一般,因此取名叫函数对象。举个最简单的例子:[cpp] view plain copyclass FuncObjType { public: void operator() () { c转载 2016-10-26 08:42:13 · 422 阅读 · 0 评论 -
STL generate()与generate_n()
generate()功能:用指定函数对象产生的值去给容器指定范围内元素赋值[cpp] view plain copytemplateclass ForwardIterator, class Generator> void generate( ForwardIterator _First,转载 2016-10-26 08:51:13 · 553 阅读 · 0 评论 -
linux下获取微秒级精度的时间
使用C语言在linux环境下获得微秒级时间1、数据结构int gettimeofday(struct timeval*tv, struct timezone *tz);其参数tv是保存获取时间结果的结构体,参数tz用于保存时区结果:struct timezone{int tz_minuteswest;/*格林威治时间往西方的时差*/int tz_dsttim转载 2016-10-20 15:30:36 · 4033 阅读 · 0 评论 -
让一个数字显示指定位数
#include #include //一定要包含这个c++头文件,非常重要 using namespace std; int main() { int test[4] = { 1, 12, 123, 1234 }; for (int i = 0; i { cout '0') " ";转载 2016-10-20 20:07:18 · 658 阅读 · 0 评论 -
c++虚函数和抽象类
转自:链接:http://www.zhihu.com/question/23971699/answer/69592611首先:强调一个概念定义一个函数为虚函数,不代表函数为不被实现的函数。定义他为虚函数是为了允许用基类的指针来调用子类的这个函数。定义一个函数为纯虚函数,才代表函数没有被实现。定义纯虚函数是为了实现一个接口,起到一个规范的作用,规范继承这个类的转载 2016-07-13 20:43:18 · 536 阅读 · 0 评论