c++
页图
本人学生一枚,旨在于把自己学习积累的问题,经验与大家分享。
展开
-
CUDA 网格(Grid)、线程块(Block)和线程(Thread)的组织关系以及线程索引的计算公式
网格(Grid)、线程块(Block)和线程(Thread)的组织关系CUDA的软件架构由网格(Grid)、线程块(Block)和线程(Thread)组成,相当于把GPU上的计算单元分为若干(2~3)个网格,每个网格内包含若干(65535)个线程块,每个线程块包含若干(512)个线程,三者的关系如下图:Thread,block,grid是CUDA编程上的概念,为了方便程序员软件设计,组织线程。thread:一个CUDA的并行程序会被以许多个threads来执行。block:数个threads会被群转载 2022-04-15 15:43:37 · 3110 阅读 · 1 评论 -
互斥锁和条件变量实现生成者消费者队列
介绍几个概念互斥量 mutexmutex是一个类,创建一个mutex mtx对象,在需要加锁的代码前后加上mtx.lock()和mtx.unlock(),实现互斥锁的加锁和解锁。但是在加锁和解锁的代码中间可能会出现异常,导致没有进行解锁。为了解决这个问题引入了两种锁类型(将加锁和解锁作为一个原子性的操作,同智能指针类似,超过使用范围自动解锁):lock_guard,与Mutex RAII相关, 方便对互斥量上锁unique_lock, 与Mutex RAII相关, 方便对互斥量上锁,同时提供了原创 2021-08-25 15:57:52 · 154 阅读 · 0 评论 -
C++ 单例模式总结与剖析
目录C++ 单例模式总结与剖析一、什么是单例二、C++单例的实现2.1 基础要点2.2 C++ 实现单例的几种方式2.2.1 有缺陷的懒汉式2.2.2 线程安全、内存安全的懒汉式单例 (智能指针,锁)2.2.3 最推荐的懒汉式单例(magic static )——局部静态变量2.2.4 函数返回引用2.3 单例的模板2.3.1 CRTP 奇异递归模板模式实现2.3.2 不需要在子类声明友元的实现方法2.3.3 函数模板返回引用三、何时应该使用或者不使用单例反对单例的理由参考文章C++ 单例模式总结与剖.转载 2021-08-24 17:00:50 · 287 阅读 · 0 评论 -
c++实现string类
#include <iostream>#include <cstring>using namespace std;class mystring{public: mystring(const char *str = nullptr){ if(str==nullptr){ data = new char[1]; data[0] = '\0'; len = 0; }el原创 2021-08-24 16:40:36 · 139 阅读 · 0 评论 -
拓扑排序c++
拓扑排序判断无向图中是否有环#include<iostream>#include<vector>#include<queue>using namespace std;void TopSort(vector<vector<int>>& grid, vector<int>& indegree){ queue<int> q; for(int i=0; i<indegree.siz原创 2021-07-31 17:00:35 · 166 阅读 · 0 评论 -
c++处理输入遇到空行结束
在笔试时经常需要我们处理输入输出,有时会出现输入空行(就是只有一个换行符)时结束输入。这个时候就需要我们判断一下了。在这里记录一下;#include <iostream>#include <string>using namespace std;int main(){ string str; while(getline(cin, str)) { // getline读取一整行,str不含换行符号 if(str原创 2021-07-25 00:14:31 · 4998 阅读 · 1 评论 -
c++实现LRU
#include<iostream>#include<vector>#include<algorithm>#include<unordered_map>using namespace std;struct DLinkedNode{ int key, value; DLinkedNode* prev; DLinkedNode* next; DLinkedNode(): key(0), value(0), prev(n原创 2021-07-21 20:57:20 · 147 阅读 · 0 评论 -
c++实现简单的unordered_map
#include <iostream>#include <string>#include <queue>using namespace std;class HashFunc{public: int operator()(const int key){ return 3*key + 1; }};template <class Key, class Value>class HashNode{public:原创 2021-07-21 20:56:26 · 501 阅读 · 0 评论 -
最小生成树 C++简洁实现
1.普利姆算法时间复杂度#include<iostream>#include<algorithm>#include<vector>using namespace std;int prime(vector<vector<int>>& edge){ int n = edge.size(); vector<bool> visit(n, false); vector<int> dis(原创 2021-04-11 20:56:45 · 533 阅读 · 0 评论 -
priority_queue自定义排序
方法1:// 按pair的第二个元素降序排列 static bool cmp(pair<int,int> a, pair<int, int> b){ return a.second > b.second;}priority_queue<pair<int, int>, vector<pair<int, int>>, decltype(&cmp)> q(cmp);方法2: struct cmp1{原创 2021-03-01 22:58:57 · 3048 阅读 · 0 评论 -
STL源码剖析(侯杰)——读书笔记
文章目录STL源码剖析(侯杰)——读书笔记1. STL概论2.空间配置器SGI标准空间配置器, std::allocatorSGI特殊的空间配置器, std::alloc构造和析构 construct()和destroy()空间配置与释放3.迭代器概念与traits编程概念迭代器相应型别传递Traits编程技法——STL源码门钥Partial Specialization(偏特化)的意义std::iterator的保证4.序列式容器vector**list**dequestackqueueheappri原创 2020-11-16 14:32:14 · 4630 阅读 · 1 评论 -
第2章构造函数语义学读书笔记——深度探索c++对象模型
第2章 构造函数语义学2.1 Default Constructor的构建操作class Foo{public: int val; Foo *pnext;};void foo_bar(){ // 程序需要bar's members都被清零 Foo bar; if(bar.val || bar.pnext) // ...do something}上面例子中,程序语义需要Foo有一个default constructor,可以将它的两个members初始化为0原创 2020-11-04 21:51:44 · 890 阅读 · 1 评论 -
c++ map 对key和value排序
c++ map排序1.对key值排序2.对value值(key和value值同时)排序1.对key值排序使用提供的less、grater或自定义排序#include<iostream>#include<algorithm>#include <vector>#include<string>#include<map>#include <functional> // std::greaterusing namespace s原创 2020-11-01 13:10:09 · 1873 阅读 · 1 评论 -
c++ 内联函数inline
代码中函数调用包含着一系列工作:调用前要保存寄存器,并在返回时恢复。同时可能需要拷贝参数,程序还要转向一个新的位置继续执行。而通过inline关键字可以将函数指定为内联函数,也就是将内联函数代码放到调用点处执行。内联函数一般用于代码规模较小、流程直接、频繁调用的函数。当我们 使用inline只是建议编译器“内联的”展开 ,而代码不符合代码块短小并且频繁调用的情况时,编译器会把它当作普通函数。inline const int & minVal(const int &a, const int原创 2020-10-31 20:37:54 · 729 阅读 · 0 评论 -
第1章读书笔记——深度探索c++对象模型
文章目录第1章 关于对象1.1 c++对象模式1.2**关键词带来的差异**1.3对象的差异第1章 关于对象1.1 c++对象模式c++中有两种class data members: static和nonstatic,三种class member functions: static,nonstatic和virtual对下面代码class point声明:class Point{public: Point(float xval); virtual ~Point(); .原创 2020-10-25 16:59:24 · 821 阅读 · 0 评论 -
八路视频全景拼接
系统流程图:1.相机标定•准备20张拍摄的标定板图像。•提取图片的的角点信息。•在上一步的基础上,提取亚像素点。•相机标定计算,获得相机参数 。2.计算相邻图片偏移距离:•Surf特征点提取•特征点匹配•筛选有效的特征点•计算水平方向和竖直方向上的偏移距离3.图片融合:实现图像的渐变效果•根据偏移距离计算出左右重合和位置•在重合区域内进行线性插值图片融合•柱面投影,保持图片中的空间约束与视觉的一致性4.检测框校正去重•检测框在全景拼接图片上的显示•通过累加偏移距离可以原创 2020-10-16 20:13:19 · 1104 阅读 · 0 评论 -
c++primer笔记 智能指针
12.1 动态内存和智能指针 c++中动态内存是通过new和delete来操作的,确保在正确的时间释放内存是及其困难的。新的标准库提供了智能指针类型来管理动态对象,它可以自动释放所指向的类shared_ptr允许多个指针指向同一个对象unique_ptr独占所指向的对象weak_ptr 弱引用,指向shared_ptr所管理的对象12.1.1初始化创建shared_ptr<string> p1; //shared_ptr, 指向stringshared_ptr<l原创 2020-10-16 19:43:57 · 769 阅读 · 0 评论 -
c++ const和指针代码说明
#include <iostream>using namespace std;int main(){ // 可以将const指针赋给const指针,但b不能把const指针赋给常规指针 const float g_earth = 9.80; const float *pe = &g_earth; // float *pm = &g_earth; 错误 // 一级间接关系 int zz = 30; int *pd原创 2020-10-12 14:34:20 · 649 阅读 · 0 评论