C++
MagiChos
这个作者很懒,什么都没留下…
展开
-
生成库文件
在项目开发过程中,有时我们不想将我们的某些功能如何实现暴露出来,我们可以只提供声明的头文件+对应的库文件来实现,下面介绍一下如何生成库文件以及如何使用。创建项目创建一个glibrary的文件夹在该文件夹下创建如下几个文件CMakeLists.txt、build、include、src、use_library.cpp在inlude目录下创建一个test.h文件,其代码如下#ifndef...原创 2020-03-15 18:02:00 · 564 阅读 · 0 评论 -
emplace_back和push_back性能对比
push_back()函数向容器中加入一个临时对象(右值元素)时, 首先会调用构造函数生成这个对象,然后条用拷贝构造函数将这个对象放入容器中, 最后释放临时对象。emplace_back()函数向容器中中加入临时对象, 临时对象原地构造,没有赋值或移动的操作#include <opencv2/opencv.hpp>#include <iostream>#includ...原创 2020-03-11 11:42:15 · 999 阅读 · 0 评论 -
stl 中bind1st和bind2nd
今天看到了bind1st和bind2nd,原来没有用过,就写了个小例子学习其用法。#include <iostream>#include <functional>#include <algorithm>#include <vector>using namespace std;int main(){ vector<int> vec1 ; for (int i = 0 ; i原创 2016-12-07 20:55:47 · 296 阅读 · 0 评论 -
stl map容器按值排序
stl中的map 没有其他容器的sort函数,当需要按值排序时,可以按着如下方式进行排序。#include <iostream>#include <map>#include <vector>#include <algorithm>#include <string>bool cmp_by_value(const std::pair<int , double> &lhs , const std:原创 2016-12-06 16:47:27 · 581 阅读 · 0 评论 -
利用位运算做加法
一直没有注意位运算的使用,无意中看到利用位运算做加法,感觉比较有意思,就学习了下,感觉还挺有趣。现在简单介绍一下,防止以后遗忘。 假设我们要计算1+2的和,其中1的二进制表示为01,2的二进制为10。二进制的加法主要分为三步:对1和2的二进制进行异或(相等为0,不相等为1,即0^0=0,0^1=1)得11。对1和2的二进制进行位与(都为1时才为1,即1&1=1,1&0=0)得00,然后向左移动原创 2016-12-08 00:02:33 · 434 阅读 · 0 评论 -
将二维坐标保存为dxf格式
void lineDXF(const new3s_PointXYZ &start_pt , new3s_PointXYZ &end_pt , char *savefile){ FILE *fp = fopen(savefile , "w") ; if (!fp) { printf("Cannot open output file.\n");原创 2017-02-28 19:15:40 · 2194 阅读 · 0 评论 -
vs2012编译protobuf
protobuf是谷歌的一个开源库,类似于xml的东东,不过相较于xml更灵活、速度更快,下面介绍一下其具体的编译方法。 准备阶段: 编译采用的protobuf2.5,可以从官网上进行下载。解压下载的压缩包,进入vsprojects文件下,用vs2012打开protobuf.sln工程文件,一共有九个工程,可以全部编译,也可以只编译libprotobuf,libprotobuf-lite,li原创 2017-03-02 20:30:23 · 857 阅读 · 0 评论 -
istringstream、ostringstream和stringstream
库定义了三种类:istringstream、ostringstream和stringstream,分别用来进行流的输入、输出和输入输出操作。另外,每个类都有一个对应的宽字符集版本。简单起见,我主要以stringstream为中心,因为每个转换都要涉及到输入和输出操作。 注意,使用string对象来代替字符数组。这样可以避免缓冲区溢出的危险。而且,传入参数和目标对象的类型被自动推导出来,即使使用了不原创 2017-03-03 14:33:08 · 390 阅读 · 0 评论 -
判断点是否在多边形内
计算机图形学中经常需要判断点是否在多边形内,刚好最近写程序的时候遇到这个问题,原理很简单也就不在这里啰嗦了,当时抱着偷懒的心理随便在网上找了一段代码贴到程序里,好像不尽人意,或多或少的存在一些问题,经过多次尝试终于完美解决了,下面附上相关代码:bool isInPolygon4(const QVector<QPoint>& pts, QPoint & pt){ unsigned vertC原创 2017-05-06 17:09:37 · 1000 阅读 · 0 评论 -
C语言高效编程与代码优化
英文:codeproject,翻译:码农网 gunner www.codeceo.com/article/c-high-performance-coding.html 如有好的文章投稿,请点击 → 这里查看详情在本篇文章中,我收集了很多经验和方法。应用这些经验和方法,可以帮助我们从执行速度和内存使用等方面来优化C语言代码。简介在最近的一个项目中,我们需要开发一个运行在移动设备上但不保证图像高质量转载 2017-06-04 01:56:31 · 637 阅读 · 0 评论 -
牛顿迭代法
原来很简单就不多说了,如果有不明白的地方可以百度一下,下面我给一段代码演示一下牛顿迭代方法的用法,例子比较简单。#include<iostream>#include<cmath>using namespace std;#define f(x) (x*x*(x-1.0)-1.0) //举例函数x^3-x^2-1#define g(x) (3.0*x*x-2.0*x) //导函数3x^2-2x原创 2017-06-25 22:43:57 · 550 阅读 · 0 评论 -
获取文件目录和文件名
程序中用到了获取文件路径和文件不带后缀的文件名,原来一直采用boost库,现在不用配置boost库,就试着用c++自身的一些函数发现其实挺简单的,现在记录如下:#include <iostream>#include <ostream>#include <fstream>#include <string>char *getFilename(const char *file){ ch原创 2017-03-21 14:11:23 · 852 阅读 · 0 评论 -
二叉树
#include<iostream>#include<string>#include <stack>#include <queue>using namespace std;template <class T>struct BiNode //二叉树的结点结构{ T data; BiNode<T> *lchild, *rchild;};template <class原创 2017-09-13 13:16:28 · 481 阅读 · 0 评论 -
快速排序
/************************************************************************//* 快速排序 *//**********************************************原创 2017-09-13 13:37:18 · 244 阅读 · 0 评论 -
剑指offer面试题4
题目:实现一个函数,把字符串中的每个空格替换成“%20”,例如输入“we are happy”,输出“we%20are%20happy”。 我自己试着也写了一下,欢迎大家指正。#include <iostream>void replaceBlank(char *src, int len , char *dst , int new_len){ // 这里减1是因为最后一个是'\0'原创 2017-09-09 15:42:23 · 234 阅读 · 0 评论 -
递归二分搜索
#include <iostream>int binarysearch(int datas[], int x, int low, int high){ if (low > high) { return -1 ; } int mid = (int)(low + high) * 0.5; if (x == datas[mid]) {原创 2017-09-09 18:45:04 · 205 阅读 · 0 评论 -
求输入向量的任何连续子向量的最大和
在编程珠玑里看到的,就随手写了一个,运行时间是O(n*n)后期再优化。#include <iostream>int calcMax(int array[], int length , int &start , int &end){ int sumMax = array[0]; for (int i = 0; i < length; ++i) { int su原创 2017-09-10 19:42:31 · 300 阅读 · 0 评论 -
C读取文本坐标
今天读取文本文件的时候,本来很简单的东西,谁知道会遇到一想不到的错误,又仔细的把本文读写仔细看了下,现在记录一下以方便日后查找。读取的文本数据格式如下 跳过第一行保存ID,经度、维度以及高程值。#include <iostream>#include <fstream>#include <vector>#include <iomanip>using namespace std;void ma原创 2016-12-06 13:18:25 · 1447 阅读 · 0 评论 -
利用STL中的Sort比较自定义结构体
#include <vector>#include <iostream>#include <algorithm>#include <functional>using namespace std;struct Point3t{ Point3t(double x_ , double y_ , double z_) { x = x_ ; y = y原创 2016-03-30 22:44:32 · 957 阅读 · 0 评论 -
松弛迭代法
最近用到了松弛法解方称,为加深记忆,就记录下来/************************************************************************//* 松弛法解方程 *//*********************原创 2016-01-03 16:01:21 · 3563 阅读 · 1 评论 -
大文件切割
有时候遇到文件特别大的时候,一次读取特别费内存,可以考虑将大文件分割成若干个小文件进行读取。/************************************************************************//* 大文件分割成多个文件原创 2016-01-06 23:26:19 · 865 阅读 · 1 评论 -
多线程并行检索
有时候查找的时候数据量很大的时候,可以开几个线程一起查找,这样就可以加快查找的速度,用一个简单的例子进行说明。/************************************************************************//* 并行检索原创 2016-01-10 01:57:26 · 626 阅读 · 0 评论 -
多线程原子操作的简单示例
多线程的原子操作快于互斥量和临界区,用一个简单的示例演示其用法#include <iostream>#include <windows.h>using namespace std;int num = 0 ;DWORD WINAPI run(void *p){ for (int i = 0 ; i < 100000 ; i++) { InterlockedIncr原创 2016-01-11 01:20:49 · 360 阅读 · 0 评论 -
多线程临界区
临界区是一段供线程独占访问的代码,也就是说若有一线程正在访问代码段,其他线程想要访问,只能等待当前线程离开该代码方可进入,这既保证了线程的安全。windows系统中CRITICAL_SECTION实现了临界区的相关机制。 如下示例开辟了64个线程,设置临界区每个线程中num自增,然后再自减,其代码如下:/***********************************************原创 2016-01-11 01:32:40 · 1095 阅读 · 0 评论 -
C++11多线程简单示例
用惯了c中的多线程,后来用兼容c++11的编译器,一个c++的多线程变得更简单,用一段代码展示:#include <iostream>#include <thread>//管理线程的函数和类#include <vector>using namespace std;void hello(){ cout<<"hello concurrent world!\n" ;}void main原创 2016-01-11 01:42:40 · 426 阅读 · 0 评论 -
multimap自定义结构体
利用multimap管理像素对应的三维坐标点,将Point2t作为键,Point3t作为键值,因为存在计算误差,一个像素坐标对应多个键值的情况。#include <iostream>#include <map>using namespace std;struct Point2t{ Point2t(double x_ , double y_) { x = x_ ;原创 2016-03-31 21:01:16 · 1284 阅读 · 0 评论 -
一套帮助你理解 C 语言的测试题
来源:nowamagic 链接:http://www.nowamagic.net/librarys/veda/detail/775在这个网站(http://stevenkobes.com/ctest.html)上发现一套很有趣的C语言测试题,如果你招聘C语言相关开发人员,或者正在学习C语言,很值得做一做。如果没有做,下面内容暂时不要看,最好自己先完成一遍。OK,假设你做的答案没有完全正确,那你可以转载 2016-05-25 00:23:52 · 445 阅读 · 0 评论 -
qsort()函数排序
#include <iostream>#include <algorithm>#include <math.h>int compare_desc(const void *a , const void *b) ;void main(){ int A[3] = {2 , 1 , 3} ; qsort(A , 3 , sizeof(int) , compare_desc) ;原创 2016-05-06 01:40:37 · 253 阅读 · 0 评论 -
回调函数用法
Callback的本质是设置一个函数指针进去,然后在需要需要触发某个事件时调用该方法。下面写个小例子加强理解#include <iostream>using namespace std;typedef void (* callback)(const char *ch) ;void printfun(const char *ch) ;void fun(const char *name , cal原创 2016-05-06 01:54:33 · 589 阅读 · 0 评论 -
flann 中的matrix类赋值
flann是一个快速最近邻搜索库,数据是按矩阵形式存储的,主要用的是matrix这个类。下面是一个小例子,展示如何使用这个matrix类#include <flann/flann.hpp>#include <iostream>#include <stdio.h>#include <flann/util/matrix.h>using namespace std;struct MyPoint{原创 2016-07-23 13:49:11 · 1850 阅读 · 0 评论 -
flann L2结构体
/** * Squared Euclidean distance functor, optimized version欧式距离平方优化后的版本 */template<class T>struct L2{ typedef bool is_kdtree_distance; typedef T ElementType; typedef typename Accumulato翻译 2016-07-27 22:50:42 · 606 阅读 · 0 评论 -
flann索引类
flann::Index 是Flann近邻索引类,该类用于抽象的不同类型的最近搜索索引。namespace flann { template<typename Distance> class Index { typedef typename Distance::ElementType ElementType; typedef ty翻译 2016-07-26 23:50:00 · 1060 阅读 · 0 评论 -
合并两个vector
#include <vector>#include <iostream>using namespace std;void main(){ vector<int> vec1 ; vector<int> vec2 ; for (int i = 0 ; i < 3 ; ++i) { vec1.push_back(rand()%10) ;原创 2016-07-31 20:16:48 · 1382 阅读 · 0 评论 -
基本Kmeans算法介绍及其实现(转)
1.基本Kmeans算法[1] [cpp] view plain copy 选择K个点作为初始质心 repeat 将每个点指派到最近的质心,形成K个簇 重新计算每个簇的质心 until 簇不发生变化或达到最大迭代次数 时间复杂度:O(tKmn),其中,t为迭代次数,K为簇的数目,m为记录数,n为维数 空间复杂度:O((m+K)n),其中,K为簇的数目,m为记录数,n为转载 2016-08-01 21:36:11 · 417 阅读 · 0 评论 -
C++ STL--stack/queue 的使用方法
1、stack stack 模板类的定义在头文件中。 stack 模板类需要两个模板参数,一个是元素类型,一个容器类型,但只有元素类型是必要 的,在不指定容器类型时,默认的容器类型为deque。 定义stack 对象的示例代码如下: stack s1; stack s2; stack 的基本操作有: 入栈,如例:s.push(x); 出栈,如例:s.pop();注意,出栈操作只是删转载 2016-08-21 00:14:44 · 313 阅读 · 0 评论 -
Debug Assertion Failed! Expression: _pFirstBlock == pHead
最近用vs开发,不知为何有这个问题在网上看到各种分析一大堆,后来试了下项目属性中c/c++代码生成中的运行库中改为多线程调试DLL(/MDd),居然成功解决,希望有遇到类似问题的朋友可以试一下,距离远离没有深究,毕竟只要能问题解决就一切OK!原创 2016-01-19 18:59:24 · 1039 阅读 · 0 评论