1.数组使用

int* p = new int[5](); // 数组新建并全部初始化为0
等价于:
int* p;
p = new int[5]();
int* q = new int[5];   // array elements all have indeterminate value
2.队列的使用。STL模板中,queue只能在读q.front();q.back();必须要要配合pop()函数才能读完所有的队列内容。
而deque模板的使用,可以访问到任意位置的数据,读取方法,可以是q.[i],也可以是q.at(i),注意要从0开始读,所以for循环写的时候,要这样子写:
加上头文件:#include <queue>
for(int i = ;i < q.size();++i)
cout << "q[" << i << "] : " << q[i] << endl;
cout << endl;

还有将一个结构体变量放进队列的时候内存泄漏是个很大的问题。在结构体里面谨慎的使用指针,看下面的一个例子。

定义了一个结构体变量:

struct MyStruct
{
Mat irdata;
Mat depthdata;
float *array;
};

其中包含了两个mat矩阵。和一个float矩阵的指针。

在调用的时候千万要注意,

#include "que-mat.h"

using namespace cv;
using namespace std;
int cnt = ;
int k = ;
int p, q;
MyStruct s_copy;
std::deque<MyStruct> qe;
MyStruct s1;
MyStruct s2;
bool matqueue(Mat inputdata1, Mat inputdata2, float *array1)
{
cnt++;
//s1.array = new float[20]{};
//插入队尾
s1.irdata = inputdata1;//调用问题,这里因为指向了同一个内存,所以必须clone()一下。
s1.depthdata = inputdata2;
s1.array = array1;//调用问题,该指针一直指向了同一片内存空间,所以会被不停的刷掉,所以永远只有最后一个数据失是正确的,其他存储数据都是乱码
qe.push_back(s1);
int n = qe.size();
if (qe.size() > ) qe.pop_front();
cout << "队列大小 " << n << endl;
s_copy = qe.back();
if ((s_copy.array[] == ) || (s_copy.array[] == )){
// if (n == 10){
for (int j = ; j < ; j++){
k++;
//s_copy.array = new float[20]{};
s2 = qe.back();
cout << "队列大小 " << qe.size() << "s2.array " << s2.array[] << endl;
save_image(s2.irdata, s2.depthdata, , , k);
save_txt(s2.array, k);
//队首出栈
qe.pop_back();
}
} if (cnt == ){
waitKey();
} // 判断队列是否为空
if (qe.empty()){
std::cout << "Enpty" << std::endl;
return ;
}
return ;
}
问题已经指出来了,然后怎么写呢,
s1.irdata = inputdata1.clone();
s1.depthdata = inputdata2.clone();
//申请一个空间,再memset进去
s1.array=(float*)malloc(*sizeof(float)); memset(s1.array,&array,);//将数据填充进去
qe.push_back(s1);

关于内存机制,需要不断的学习,修改后的代码还有一个问题,就是为调用迅速将文件中参数引用也发生了修改

bool inque_mat(const Mat &inputdata1, const Mat &inputdata2, GestureInfo gestureInfo);

const Mat &inputdata1。这样子调用比较稳定。

 

C++编程技巧(长期更新)的更多相关文章

  1. c语言技巧--长期更新

    1.   #define LOWER(c)            (unsigned char)(c | 0x20) 换成小写 2.   gcc -Wall -Werror //告警当成 错误来处理 ...

  2. [原创][FPGA]Quartus实用小技巧(长期更新)

    0. 简介 在使用Quartus软件时,经常会时不时的发现一些小技巧,本文的目的是总结所查阅或者发现到的小技巧,本文长期更新. 1. Quartus中的模板功能 最近在Quartus II的菜单里找到 ...

  3. 一些有意思的面试题(持续更新) .C语言编程技巧札记

    一些有意思的面试题(持续更新) http://blog.csdn.net/wangyuling1234567890/article/details/38565239 C语言编程技巧札记 http:// ...

  4. Java代码优化(长期更新)

    前言 2016年3月修改,结合自己的工作和平时学习的体验重新谈一下为什么要进行代码优化.在修改之前,我的说法是这样的: 就像鲸鱼吃虾米一样,也许吃一个两个虾米对于鲸鱼来说作用不大,但是吃的虾米多了,鲸 ...

  5. Java编程技巧:if-else优化实践总结归纳

    文/朱季谦 说实话,其实我很讨厌在代码里大量使用if-else,一是因为该类代码属于面向过程的,二嘛,则是会显得代码过于冗余.这篇笔记,主要记录一些自己在工作实践当中针对if-else的优化心得,将会 ...

  6. 无插件Vim编程技巧

    无插件Vim编程技巧 http://bbs.byr.cn/#!article/buptAUTA/59钻风 2014-03-24 09:43:46 发表于:vim  相信大家看过<简明Vim教程& ...

  7. 无插件VIM编程技巧(网摘)

    无插件VIM编程技巧 原文出处:[陈皓 coolshell] 相信大家看过<简明Vim教程>也玩了<Vim大冒险>的游戏了,相信大家对Vim都有一个好的入门了.我在这里把我日常 ...

  8. PLSQL Developer 11 使用技巧(持续更新)

    PLSQL Developer 11 使用技巧 (持续更新) 目录(?)[-] 首先是我的颜色配置 常用快捷键 提升PLSQL编程效率 按空格自动替换 关闭Window窗口 PLSQL 实用技巧 TI ...

  9. Labview学习之路(十一)日常编程技巧

    此文章用于记录自己在学习Labview过程中所用到的编程技巧,会一直更新下去. (一)移动控件 直接鼠标拖动. 按住shift键,鼠标移动,可以水平和竖直移动(取决于鼠标最开始的移动方向). 使用键盘 ...

  10. js异步编程技巧一

    异步回调是js的一大特性,理解好用好这个特性可以写出很高质量的代码.分享一些实际用的一些异步编程技巧. 1.我们有些应用环境是需要等待两个http请求或IO操作返回后进行后续逻辑的处理.而这种情况使用 ...

随机推荐

  1. Haskell 笔记(三)类型系统

    类型 (Type) Haskell的类型系统式静态类型系统,在编译的时候就知道数据类型,所以不同类型的值运算在编译的时候就会报错,比如用布尔值和整数运算,在C语言中这种运算就不会报错. Haskell ...

  2. Android call setting 源码分析

    看下篇之前,请先读这三篇文章: Android GSM驱动模块(rild)详细分析(一)基本架构及初始化 Android GSM驱动模块(rild)详细分析(二)request流程 Android G ...

  3. phper談談最近重構代碼的感受(1)

    作爲一個工作時間並不算長的phper,卻參與了兩家公司的代碼重構.下面談談我的一些感受. 在mjm公司,當時我負責日常的需求開發和2.0的重構.當初的重構更多的是clean codes和一些代碼規範上 ...

  4. OOAD(面向对象分析和设计)GRASP之创建者模式(Creator)又称生成器模式学习笔记

    说OOAD是一门玄学,一点都不为过.又或许是因为我之前一直没有很好的建立面向对象的思想,更有可能是因为练得不够多...总之,一直没能很好理解,哪怕把一本叫做<UML和模式应用>的书翻来覆去 ...

  5. css ie6最小高度问题

    最小高度问题:  这个最小高度 min-height:的问题,因为min-height:只在IE7\FF中起作用.至于这个IE6死活就是不认.而我这个页面又必需得用这个最小高度来定.   但头痛的是I ...

  6. 一口一口吃掉Hexo(二)

    如果你想得到更好的阅读效果,请访问我的个人网站 ,版权所有,未经许可不得转载! 本次系列教程的第二篇文章我会介绍如何在本地安装Hexo,请注意我使用的Windows系统,如果你是Mac或者Ubuntu ...

  7. 用php 进行对文件的操作 (上)

    如何让自己磁盘中的文件夹和目录显示在网页上?那就来看一下,用php是怎么来操作他们的吧 php中文件,一般包含两块内容,文件和目录 先来一句一句的看代码,及他的作用 运行后看一下结果 file 指的是 ...

  8. 采用apicloud开发移动端项目心得体会

    作为第一批吃螃蟹的,来说一说apicloud做移动端项目的一些体会. 刚开始接到项目,需要移动端开发两个项目,公司人员里面没有一个会原生android或者ios开发的,目前能出的技术也就是web,后端 ...

  9. 【C#】【SHARE】The registering of global hotkeys

    I remember that when I was still using VB6 sereval years ago, if global hotkeys are required, a mass ...

  10. jQuery.cssHooks

    概述 直接向 jQuery 中添加钩子,用于覆盖设置或获取特定 CSS 属性时的方法,目的是为了标准化 CSS 属性名或创建自定义属性. $.cssHooks 对象提供了一种通过定义函数来获取或设置特 ...