
C++
C++学习历程
AplusX
专注于混合现实(MR)/计算机图形学(CG)/计算机视觉(CV)相关研究
展开
-
C++线程池设计与使用
C++线程池原创 2022-11-18 11:02:01 · 447 阅读 · 0 评论 -
C/C++中的++(--)i、i++(--)的使用
c++ ++i i++转载 2022-08-15 13:51:01 · 350 阅读 · 0 评论 -
C++ 一维数组初始化
C++一维数组初始化原创 2022-08-14 12:03:05 · 920 阅读 · 0 评论 -
VS生成dll和lib库文件
师弟总结的已经很好了或者:原工程需要导出的函数:extern "C" __declspec(dllexport) void Func();现工程导入这个函数:extern "C" __declspec(dllimport) void Func();转载 2022-03-12 15:48:05 · 758 阅读 · 0 评论 -
c++中自定义sort返回vector索引
#include <algorithm>#include <stdlib.h>#include <numeric>#include <vector>#include <iostream>using namespace std;template <typename T>vector<size_t> sort_indexes(vector<T> &v){ vector<size_t原创 2022-02-03 11:23:30 · 1494 阅读 · 0 评论 -
根据曲线上的采样点拟合直线
//@Func lineFit//@para points:曲线上的所有采样点//@para a,b,c: 直线ax+by+c=0的三个参数void lineFit(vector<cv::Point2f> points, float &a, float &b, float &c){ int size = points.size(); float x_mean = 0; float y_mean = 0; for (int i = 0; i < si原创 2022-02-02 16:27:11 · 1391 阅读 · 0 评论 -
基于C++的图像散度计算
在x y的梯度上再求一次导数后相加便是散度。注意不要使用convertScaleAbsint main(int argc, char*argv[]){ cv::Mat IMG = cv::imread("./img.jpg", 1); cv::Mat k = getStructuringElement(cv::MORPH_RECT, cv::Size(3, 3), cv::Point(-1, -1)); cv::Mat graySrc, grad_x, grad_y; cv::Mat abs_原创 2021-12-15 20:57:32 · 3325 阅读 · 0 评论 -
基于C++的二叉树的入门讲解
https://zhuanlan.zhihu.com/p/60962760https://blog.youkuaiyun.com/qq_35644234/article/details/53013738https://blog.youkuaiyun.com/u012285643/article/details/78524758转载 2021-12-05 11:05:05 · 160 阅读 · 0 评论 -
Eigen库使用之矩阵的最大/小值及其位置
https://blog.youkuaiyun.com/sheng_bw/article/details/86487264转载 2021-10-11 08:55:14 · 1254 阅读 · 0 评论 -
C++ 生成随机数
要取得[a,b)的随机整数,使用(rand() % (b-a))+ a;要取得[a,b]的随机整数,使用(rand() % (b-a+1))+ a;要取得(a,b]的随机整数,使用(rand() % (b-a))+ a + 1;通用公式:a + rand() % n;其中的a是起始值,n是整数的范围。要取得a到b之间的随机整数,另一种表示:a + (int)b * rand() / (RAND_MAX + 1)。要取得0~1之间的浮点数,可以使用rand() / double(RAND_MAX)。原创 2021-10-10 14:59:39 · 456 阅读 · 0 评论 -
Tensorflow::Session 释放内存
使用tensorflow::Session是要释放的,否则循环起来,崩溃到怀疑人生。方法一:使用Close() tensorflow::Session * session; tensorflow::Status status; tensorflow::GraphDef graphdef; //Define a graph for the current model status = tensorflow::NewSession(tensorflow::SessionOptions(), &原创 2021-08-25 10:44:11 · 1168 阅读 · 0 评论 -
基于C++获取程序所占内存
#include <windows.h>#include <psapi.h>#pragma comment(lib, "Psapi.Lib")EmptyWorkingSet(GetCurrentProcess());HANDLE handle = GetCurrentProcess();PROCESS_MEMORY_COUNTERS pmc;GetProcessMemoryInfo(handle, &pmc, sizeof(pmc));// The work原创 2021-08-25 08:54:29 · 1861 阅读 · 0 评论 -
C++&Opencv Resize a contour
void contourOffset(const std::vector<cv::Point>& src, std::vector<cv::Point>& dst, const cv::Point& offset) { dst.clear(); dst.resize(src.size()); for (int j = 0; j < src.size(); j++) dst[j] = src[j] + offset;}void scaleC转载 2021-07-27 21:13:18 · 386 阅读 · 0 评论 -
C++中extern使用
C++中extern是指全局的意思。它一般有两个方面的用途:1、声明变量首先说一下声明和定义的区别:①变量的定义:用于为变量分配存储空间,还可以为变量指定初始值。在一个程序中,变量有且仅有一个定义。②变量的声明:用于向程序表明变量的类型和名字。定义也是声明:当定义变量时我们声明了它的类型和名字。可以通过使用extern 关键字声明变量名而不定义它。例如:extern int i; //声明一个变量i,但是并没有定义int i; //声明并且定义了一个变量iextern 声明不是定义,也不分转载 2021-07-09 15:45:59 · 10400 阅读 · 1 评论 -
OpenMP使用指南
https://bisqwit.iki.fi/story/howto/openmp/转载 2021-03-01 10:31:43 · 281 阅读 · 0 评论 -
基于C++实现线程池加速
经过长期探索,发现一个不需要手动设置线程休眠时间(e.g. std::this_thread::sleep_for(std::chrono::microseconds(1)))的代码:Github: https://github.com/log4cplus/ThreadPool#ifndef THREAD_POOL_H_7ea1ee6b_4f17_4c09_b76b_3d44e102400c#define THREAD_POOL_H_7ea1ee6b_4f17_4c09_b76b_3d44e1024原创 2021-02-26 10:55:17 · 437 阅读 · 0 评论 -
c++虚函数的作用
c++虚函数的作用是什么? - 7sDream的回答 - 知乎https://www.zhihu.com/question/23971699/answer/26263735总结:虚函数目的是在用基类指针指向派生类的时候还能正确调用派生的实现。转载 2021-02-16 16:11:08 · 103 阅读 · 0 评论 -
C++ Gamma校正
void gamma_correction(cv::Mat& src, cv::Mat& dst, float K) { uchar LUT[256]; src.copyTo(dst); for (int i = 0; i < 256; i++) { //float f = (i + 0.5f) / 255; float f = i / 255.0; f = pow(f, K); //LUT[i] = cv::saturate_cast<uchar>.原创 2020-11-19 18:37:04 · 905 阅读 · 0 评论 -
C++和Python的OpenCV中关于图像坐标的注意事项
基于C++的OpenCV:.at<float>(y, x) 先列再行 .size() 得到的是Mat的(高,宽) CUDA的GpuMat也是Mat(y,x) 先列再行 cv::Point (x,y) x是列,y是行基于Python的OpenCV: center = (col, row)表示坐标的时候先列再行,和c++的一样 但是表示矩阵的哪个像素时,t[row,col]先行再列...原创 2020-09-18 13:44:33 · 459 阅读 · 0 评论 -
一维二维数组初始化
1.一维数组静态 int array[100]; 定义了数组array,并未对数组进行初始化 静态int array[100] = {1,2}; 定义并初始化了数组array 动态int* array = new int[100]; delete []array; 分配了长度为100的数组array 动态int* array = new int[100]{1,2}; delete []array; 为长度为100的数组array初始化前两个元素2. 二维数组静态 int...原创 2020-09-02 14:03:04 · 315 阅读 · 0 评论 -
C++ Stack & Queue & priority_queue
栈stack:stack 后入先出(LIFO) q.top() 获取栈顶元素(并不删除) q.pop() 删除栈顶元素 q.push(x) 向栈中加入元素 q.empty() 判断栈是否为空 队列queue:先入先出(FIFO) q.front() 获取队首元素(并不删除) q.pop() 删除队首元素 q.push...原创 2020-02-28 19:00:27 · 211 阅读 · 0 评论 -
Dijkstra算法
https://www.cnblogs.com/52dxer/p/10465982.htmlhttps://www.zhihu.com/question/20630094/answer/758191548https://www.cnblogs.com/bigsai/p/11537975.html转载 2019-12-05 10:18:45 · 177 阅读 · 0 评论 -
c++静态成员函数好处
静态成员函数主要为了调用方便,不需要生成对象就能调用。比如:class X{public: void MethodA(); static void MethodB();}此时MethodB可以直接调用,X::MethodB();MethodA必须先生成类对象才能调用,X x; x.MethodA();函数的行为对所有派生类都一致时,可以声明为静态。静态成...原创 2019-11-25 15:08:28 · 1425 阅读 · 0 评论 -
vector中begin(),end()和front(),back()的区别
一、begin函数函数原型:iterator begin();const_iterator begin();功能:返回一个当前vector容器中起始元素的迭代器。二、end函数函数原型:iterator end();const_iterator end();功能:返回一个当前vector容器中末尾元素的迭代器。三、front函数函数原...原创 2019-10-18 09:23:16 · 1443 阅读 · 0 评论 -
C++中关于[]静态数组和new分配的动态数组的区别分析
一、静态数据及动态数组的创建 静态数据: int a[10]; int a[]={1,2,3}; 数组的长度必须为常量。 动态数组: int len; int *a=new int [len]; delete a;...转载 2019-10-15 20:30:11 · 187 阅读 · 0 评论 -
C++ mutable
mutable的中文意思是“可变的,易变的”,跟constant(既C++中的const)是反义词。 在C++中,mutable也是为了突破const的限制而设置的。被mutable修饰的变量,将永远处于可变的状态,即使在一个const函数中。 我们知道,如果类的成员函数不会改变对象的状态,那么这个成员函数一般会声明成const的。但是,有些时候,我们需要在const的函数里面修改一些跟类...转载 2019-08-22 11:13:39 · 414 阅读 · 0 评论 -
c++ make_pair&pair
pair 的用法std::pair主要的作用是将两个数据组合成一个数据,两个数据可以是同一类型或者不同类型。C++标准程序库中凡是“必须返回两个值”的函数, 也都会利用pair对象。class pair可以将两个值视为一个单元。容器类别map和multimap就是使用pairs来管理其健值/实值(key/value)的成对元素。pair被定义为struct,因此可直接存取pair中...原创 2019-08-22 09:41:37 · 358 阅读 · 0 评论 -
c++ empty()函数
empty()函数是用来测试变量是否已经配置。若变量已存在、非空字符串或者非零,则返回 false 值;反之返回 true值。所以,当字符串的值为0时,也返回true,就是执行empty内部的语句。这就是陷阱。如: 假设 $value = 0; 则empty($value)=false。劝告各位,千万注意使用empty()函数。判断字符串是否为空,可以这么判断:...原创 2019-08-21 16:39:08 · 26027 阅读 · 0 评论 -
C++ 中 参数包 (typename ...) 学习笔记
Example 1:#include <bits/stdc++.h>template <typename Type>void print(Type x) { std::cout << x << ", 233333" << std::endl;}template <typename Type, typenam...转载 2019-08-21 11:14:04 · 1019 阅读 · 0 评论 -
OpenCV中KeyPoint类
https://blog.youkuaiyun.com/u010821666/article/details/52883580Opencv中KeyPoint类中的默认构造函数如下:CV_WRAP KeyPoint() : pt(0,0), size(0), angle(-1), response(0), octave(0), class_id(-1) {}现分析各项属性pt(x,y):关键...原创 2019-08-12 15:03:08 · 4233 阅读 · 0 评论 -
C语言截取指定长度子字符串方法
以strncpy为例:char dest[4] = {""};char src[] = {"123456789"};strncpy(dest, src, 3);puts(dest);输出结果为 123看到了吗,strcpy函数中的参数是字符串数组的名字,而数组名本质上是指针,那么,src+3 就可以实现将 src中从第4个字符开始复制n个字符给 dest 了char d...转载 2018-09-11 15:41:02 · 1257 阅读 · 0 评论 -
c++ resize&reserve
resize(),设置大小(size);reserve(),设置容量(capacity);size()是分配容器的内存大小,而capacity()只是设置容器容量大小,但并没有真正分配内存。打个比方:正在建造的一辆公交车,车里面可以设置40个座椅(reserve(40);),这是它的容量,但并不是说它里面就有了40个座椅,只能说明这部车内部空间大小可以放得下40张座椅而已。而车里面安装了4...原创 2019-08-22 14:55:11 · 279 阅读 · 0 评论 -
vector容器 begin()与end()函数、front()与back()的用法
begin函数:函数原型:iterator begin();const_iterator begin();功能:返回一个当前vector容器中起始元素的迭代器。end函数:函数原型:iterator end();const_iterator end();功能:返回一个当前vector容器中末尾元素的迭代器。front函数:函数原型:reference front()...原创 2019-09-03 22:17:37 · 958 阅读 · 0 评论 -
STL nth_element
nth_element(first,nth,last)first,last 第一个和最后一个迭代器,也可以直接用数组的位置。nth,要定位的第nn个元素,能对它进行随机访问.将第n_thn_th元素放到它该放的位置上,左边元素都小于它,右边元素都大于它.测试代码:http://www.cplusplus.com/reference/algorithm/nth_element...原创 2019-09-04 16:41:15 · 237 阅读 · 0 评论 -
C++中string erase函数的使用
erase函数的原型如下:(1)string& erase ( size_t pos = 0, size_t n = npos );(2)iterator erase ( iterator position );(3)iterator erase ( iterator first, iterator last );(4)iterator erase ( int n );也就是说...原创 2019-09-05 14:25:04 · 382 阅读 · 0 评论 -
c++ std::priority_queue优先队列
template <class T, class Container = vector<T>, class Compare = less<typename Container::value_type> > class priority_queue;需要头文件 #include <queue>普通的队列是一种先进先出的数据结构,元素...原创 2019-09-05 20:52:35 · 645 阅读 · 0 评论 -
c++ set
1.set的初始化set可以这样初始化set<int> iset{ 1,2,3 }; set<int> iset2 = { 1,2,3 }; 在初始化set的时候,若出现重复的元素set<int> iset3{ 1,2,3,3,3 }; set<int> iset4 = { 1,2,3,3,3 }; 则多余的重复...转载 2019-09-06 08:50:44 · 114 阅读 · 0 评论 -
the different between Const and Static in C++
1.const规定了一个变量在它初始化值之后,值不能再改变,也就是只读。来看个例子:const测试例子在这个测试程序里,我试图在初始化变量c的值之后再修改c的值,编译直接报错,告诉我c已经是一个只读变量了,不可以改值。2.static在函数内的时候,表明这个变量在函数的生命周期结束之后也不会被释放。static使用测试在第一次调用test()时,如果stati...转载 2019-09-17 14:15:43 · 185 阅读 · 0 评论 -
VS+Eigen+CUDA compile error: C2244 and MSB3721
编译环境Eigen3+CUDA9.2+VS2015错误如下:解决方式:将Eigen中的JacobiSVD and BDCSVD里的Index用Eigen::Index替换http://eigen.tuxfamily.org/dox-devel/TopicCUDA.htmlhttp://eigen.tuxfamily.org/bz/show_bug.cgi?id=1412...原创 2019-09-26 09:03:20 · 762 阅读 · 0 评论 -
C++ - "emplace_back" 和 "push_back" 的区别
https://blog.youkuaiyun.com/caroline_wendy/article/details/12967193https://blog.youkuaiyun.com/p942005405/article/details/84764104转载 2019-08-12 15:00:30 · 199 阅读 · 0 评论