C++
wandaxiao66
这个作者很懒,什么都没留下…
展开
-
STL系列(1):简介
C++ STL (Standard Template Library标准模板库) 是通用类模板和算法的集合,它提供给程序员一些标准的数据结构的实现如 queues(队列), lists(链表), 和 stacks(栈)等. C++ STL 提供给程序员以下三类数据结构的实现: 1. 顺序性容器 1) vector 从后面快速的插入与删除,可直接访问任何元素 2) de转载 2015-03-18 15:47:19 · 267 阅读 · 0 评论 -
STL系列(2):Vector 向量容器
vector是一个线性顺序结构,相当于数组,但其大小可以不预先指定,并且自动扩展。它可以像数组一样被操作,由于它的特性我们完全可以将vector 看作动态数组。 在创建一个vector 后,它会自动在内存中分配一块连续的内存空间进行数据存储,初始的空间大小可以预先指定也可以由vector 默认指定,这个大小即capacity() 函数的返回值。当存储的数据超过分配的空间时vector 会重新分转载 2015-03-24 16:11:03 · 315 阅读 · 0 评论 -
C++ vector 计算自相关性函数selfcorr
简单实现如下:templatevoid selfcorr(vector src, vector& dst){size_t len = src.size();for(size_t i=0; i{T temp = 0;int d = len-1-i;for(size_t j=0;j{temp += src[j]*src[d+j];}dst.push_原创 2015-04-01 13:42:08 · 1316 阅读 · 0 评论 -
STL系列(9):容器适配器
STL 中包含三种适配器:栈stack 、队列queue 和优先级priority_queue 。 适配器是容器的接口,它本身不能直接保存元素,它保存元素的机制是另一种顺序容器去实现,即可以把适配器看作“它保存一个容器,这个容器再保存所有元素”。 STL 中提供的三种适配器可以由某一种顺序容器去实现。默认下stack 和queue 基于deque 容器实现,priority_queue转载 2015-04-01 13:46:42 · 315 阅读 · 0 评论 -
stl系列(10):求交集
STL算法中的set_intersection可以求两个集合的向量,代码示例如下:#include #include using namespace std;int main(){ vector a,b; for(int i=0; i<100; i++) { a.push_back(i); b.push_back(i+20); } vector c(100); v原创 2015-04-08 13:22:29 · 524 阅读 · 0 评论 -
stl系列(11):求并集
STL算法中的set_union可以求两个集合的并集,示例代码如下:#include #include using namespace std;int main(){ vector a,b; for(int i=0; i<100; i++) { a.push_back(i); b.push_back(i+20); } vector c(200); vector::原创 2015-04-14 14:26:34 · 377 阅读 · 0 评论 -
STL所有算法介绍
STL算法部分主要由头文件,,组成。要使用 STL中的算法函数必须包含头文件,对于数值算法须包含,中则定义了一些模板类,用来声明函数对象。 STL中算法大致分为四类: 1、非可变序列算法:指不直接修改其所操作的容器内容的算法。 2、可变序列算法:指可以修改它们所操作的容器内容的算法。 3、排序算法:包括对序列进行排序和合并的算法、搜索转载 2015-04-15 14:49:54 · 589 阅读 · 0 评论 -
Debug 运行正常,Release版本不能正常运行
引言 如果在您的开发过程中遇到了常见的错误,或许您的Release版本不能正常运行而Debug版本运行无误,那么我推荐您阅读本文:因为并非如您想象的那样,Release版本可以保证您的应用程序可以象Debug版本一样运行。 如果您在开发阶段完成之后或者在开发进行一段时间之内从来没有进行过Release版本测试,然而当您测试的时候却发现问题,那么请看我们的调试规则1:规则1:转载 2015-04-24 10:54:34 · 1094 阅读 · 0 评论 -
BasicExcel另存为中文文件名出错的解决
wcstombs使用需要设置中文环境,具体修改代码如下:bool Block::Create(const wchar_t* filename)// PURPOSE: Create a new block file and open it.// PURPOSE: If file is present, truncate it and then open it.// PROMISE: Ret原创 2015-04-24 14:25:02 · 672 阅读 · 0 评论 -
C++重载运算操作符示例
以下示例中定义了一个class test, 重载了>等符号:#include#includeusing namespace std;class test{public: int v; /*构造函数*/ test():v(0){} test(const int &a):v(a){} test(const test &t1):v(t1.v){转载 2015-04-29 10:38:49 · 381 阅读 · 0 评论 -
MySQL C API函数大全
Mysql C API提供函数主要分为如下五种:1. 控制类函数2. 信息获取类函数3. 行列类操作函数4. 线程类操作函数5. 出错处理类函数本文归纳了C API可使用的函数,具体用法,参考文末地址中对应条目,均有详细说明。函数描述mysql_affected_rows()返回转载 2015-04-27 11:56:21 · 447 阅读 · 0 评论 -
Halcon与Opencv在QT CREATOR混合编程头文件引用顺序问题
用Halcon与Opencv在QT中混合编程时,遇到一个奇怪的问题。当头文件引用顺序如下时#include <HalconCpp.h>#include <opencv2/opencv.hpp>编译项目会提示有关core.hpp 和stringfwd.h的238个错误。解决方法为将两个头文件的引用顺序对调:#include <opencv2/ope...原创 2018-09-21 15:58:27 · 487 阅读 · 1 评论 -
cJSON_Print一定要显式释放内存
cJSON_Print会申请内存,使用完后一定要free掉。char* pstr = cJSON_Print(json);...free(pstr);pstr = NULL;血的教训。。。。。。原创 2019-08-20 17:01:54 · 2122 阅读 · 0 评论 -
opencv学习:实现matlab中的stretchlim函数
matlab中的imadjust函数的第一种调用方式为:imadjust(I), I为待处理图像,在参数封装时调用了stretchlim函数。但opencv中没有相应的实现,故参照matlab的源代码实现了stretchlim函数。该函数用了上一篇文章中实现的hist函数,void stretchlim(const IplImage* img, vector tol, vector& low_原创 2015-03-06 11:34:48 · 3219 阅读 · 0 评论 -
STL系列(8): Sets & MultiSets
集合(Set)是一种包含已排序对象的关联容器。多元集合(MultiSets)和集合(Sets)相像,只不过支持重复对象,其用法与set基本相同。 1.begin() 返回指向第一个元素的迭代器 2.clear() 清除所有元素 3.count() 返回某个值元素的个数4.empty() 如果集合为空,返回true 5.end() 返回指向最后一个元素的迭代器6.equa转载 2015-03-29 11:56:39 · 253 阅读 · 0 评论 -
霍夫变换直线检测houghlines及opencv的实现分析
导读:1. houghlines的算法思想2. houghlines实现需要考虑的要素3. houghlines的opencv实现,代码分析4. houghlines的效率分析,改进1. houghlines的算法思想检测直线,houghlines标准算法,不考虑线段,不检测线段端点。在直角坐标系和极坐标系的对应关系,点、直线在两个坐标系中是对偶关系。即直角转载 2014-10-27 15:47:59 · 1150 阅读 · 1 评论 -
opencv启动摄像头拍照
int main( int argc, const char** argv ){CvCapture* capture;capture=cvCreateCameraCapture(0);assert(capture!=NULL); IplImage* frame; frame=cvQueryFrame(capture); if(!frame) return -1原创 2014-11-26 11:14:35 · 759 阅读 · 0 评论 -
DLL导出类
DLL动态链接库是程序复用的重要方式,DLL可以导出函数,使函数被多个程序复用,DLL中的函数实现可以被修改而无需重新编译和连接使用该DLL的应 用程序。作为一名面向对象的程序员,希望DLL可以导出类,以便在类的层次上实现复用。所幸的是,DLL确实也可以导出类。然而事实却没这么简单,导出类的DLL在维护和修改时有很多地方必需很小心,增加成员变量、修改导出类的基类等操作都可能导致意想不到的后转载 2014-10-22 14:55:50 · 452 阅读 · 0 评论 -
根据.dll文件生成.lib文件
有些linux下的开源源码编译后只生成.dll文件,为了在vc中使用,需要生成.lib文件。步骤如下:1. 打开Visual Studio命令提示窗口,切换到.dll路径下2. 使用dumpbin命令:dumpbin /exports libzbar-0.dll >lib.txtlib.txt内容如下:Microsoft (R) COFF/PE原创 2014-12-10 13:29:48 · 788 阅读 · 0 评论 -
STL系列(3):List 双向链表
List是一个线性链表结构,它的数据由若干个节点构成,每一个节点都包括一个信息块(即实际存储的数据)、一个前驱指针和一个后驱指针。它无需分配指定的内存大小且可以任意伸缩,这是因为它存储在非连续的内存空间中,并且由指针将有序的元素链接起来。 由于其结构的原因,list 随机检索的性能非常的不好,因为它不像vector 那样直接找到元素的地址,而是要从头一个一个的顺序查找,这样目标元素越靠后,它转载 2015-03-26 10:41:52 · 282 阅读 · 0 评论 -
STL系列(4):Deque 双向队列
deque是一种优化了的、对序列两端元素进行添加和删除操作的基本序列容器。它允许较为快速地随机访问,但它不像vector 把所有的对象保存在一块连续的内存块,而是采用多个连续的存储块,并且在一个映射结构中保存对这些块及其顺序的跟踪。向deque 两端添加或删除元素的开销很小。它不需要重新分配空间,所以向末端增加元素比vector 更有效。 实际上,deque 是对vector 和list转载 2015-03-26 10:50:08 · 286 阅读 · 0 评论 -
STL系列(5):vector 删除重复元素
STL提供了很多实用的算法,这里主要讲解sort和unique算法。删除重复元素,首先将vector排序。sort( vecSrc.begin(), vecSrc.end() );然后使用unique算法。 vecSrc.erase( unique( vecSrc.begin(), vecSrc.end() ), vecSrc.end() );unique返转载 2015-03-26 15:28:37 · 312 阅读 · 0 评论 -
opencv学习:二维浮点数离散傅里叶变换及其扩展边界优化
opencv中提供了傅里叶变换函数cvDFT,执行二维浮点数离散傅里叶变换的代码如下:void fft2(const IplImage* src, IplImage* dst){ //实部、虚部 IplImage *image_Re = 0, *image_Im = 0, *Fourier = 0; image_Re = cvCreateImage(cv原创 2015-03-13 10:45:28 · 979 阅读 · 0 评论 -
STL系列(6):vector list deque比较
vector 是一段连续的内存块,而deque 是多个连续的内存块, list 是所有数据元素分开保存,可以是任何两个元素没有连续。 vector 的查询性能最好,并且在末端增加数据也很好,除非它重新申请内存段;适合高效地随机存储。 list 是一个链表,任何一个元素都可以是不连续的,但它都有两个指向上一元素和下一元素的指针。所以它对插入、删除元素性能是最好的,而查询性能非常差;适合大转载 2015-03-27 12:43:28 · 243 阅读 · 0 评论 -
STL系列(7): 关联容器特点
set, multiset, map, multimap 是一种非线性的树结构,具体的说采用的是一种比较高效的特殊的平衡检索二叉树—— 红黑树结构。因为关联容器的这四种容器类都使用同一原理,所以他们核心的算法是一致的,但是它们在应用上又有一些差别,先描述一下它们之间的差别。set 又称集合,实际上就是一组元素的集合,但其中所包含的元素的值是唯一的,且是按一定顺序排列的,集合中的每个元素转载 2015-03-27 16:38:52 · 556 阅读 · 0 评论 -
opencv学习: 模板匹配函数matchTemplate
opencv中的模板匹配函数matchTemplate可以在模板块和输入图像之间寻找匹配,获得匹配结果图像。函数原型:void cv::matchTemplate( InputArray _img, InputArray _templ, OutputArray _result, int method );_img为输入待匹配图像,_templ为模板图像,_result为匹配结果图像原创 2015-03-10 14:58:19 · 3617 阅读 · 0 评论 -
[OpenCV]拓展图像边界
图像处理中经常遇到使用当前像素邻的像素来计算当前像素位置的某些属性值,这样就会导致边界像素处越界访问,一般有两种方法解决这种问题:只对不越界的像素进行处理;对图像边界进行拓展,本文主要介绍如何使用OpenCV简单的对边界进行拓展。边界的拓展方式OpenCV提供了几种不同的边界拓展策略:[plain] view plaincopy转载 2015-03-11 13:36:54 · 450 阅读 · 0 评论 -
opencv学习:模板匹配源码解读
上文说到使用OpenCV进行模板匹配的函数matchTemplate,下面就matchTemplate函数的内部处理过程做一个简单的说明。matchTemplate函数的源代码在OpenCV的源代码目录下的 modules/imgproc/src/templmatch.cpp 文件中。其核心函数代码如下(其中的注释是我添加的):void matchTemplate( const Mat& _im转载 2015-03-12 10:37:31 · 4788 阅读 · 0 评论 -
构造函数、复制构造函数和析构函数的作用
构造函数、复制构造函数和析构函数是C++类中默认原创 2014-10-23 11:22:07 · 620 阅读 · 0 评论