
c++
文章平均质量分 57
c++
CVer儿
开源让世界更美好,闭源让人更富裕
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
C++ DLL调试奇案:一个“垃圾值”引发的内存血案
在开发一款高性能的3D超声重建库时,我们选择使用C++和LibTorch来实现核心算法,并通过一个纯C语言的API接口将其封装成DLL,以便C#、Python等多种语言调用。一切似乎进展顺利,直到一个诡异的Bug浮出水面。库允许用户通过一个配置结构体传入各种参数,其中一个是batch_size。调用端明确地将其设置为32,但在C++核心逻辑深处,它却变成了一个巨大的随机数,比如238532128。// 日志输出[步骤 6/8] 开始批处理重建 (Batch Size: 238532128)...原创 2025-07-24 17:55:20 · 730 阅读 · 0 评论 -
记录一次lambda在libtorch遇见的坑
原始代码问题是定义const int64_t c = input.size(1);实际发现lamda捕获不了局部变量c!!!deepseek给出的修改是将c。原创 2025-05-26 19:12:29 · 295 阅读 · 0 评论 -
void*使用点
因为编译器不知道它指向的具体数据类型。关注到一点不注意的是关键点。是一种通用指针类型,它确实。针对第二个问题需要仔细研究。原创 2025-04-11 01:16:28 · 316 阅读 · 0 评论 -
线程阻塞问题研究
1 条件变量+锁常用于线程间同步:必须与互斥锁(mutex)配合使用,通过wait()阻塞线程,直到其他线程调用或2 异步多线程常用于非阻塞任务,主线程无序等待子线程结果。通过或std::async实现,子任务在后台执行,结果通过异步获取。3 遇见的问题:当使用调用一个的函数(如无限循环的)时,会导致对象永远无法就绪。原创 2025-04-09 14:06:17 · 256 阅读 · 0 评论 -
lambda使用
通常值传递[=] 的外面变量,在内部是不能改变的,可以通过mutable修饰,在内部改变捕获变量i,但是i在外部不改变。即使是值传递通过mutable来改变内部值 ,而不改变外部值。原创 2024-05-28 19:22:34 · 11 阅读 · 0 评论 -
模板知识点应用
2 将类的声明和实现分离。原创 2025-01-23 15:45:51 · 244 阅读 · 0 评论 -
c++的构造函数
1 列表初始化C++ 初始化列表_c++列表初始化-CSDN博客C++构造函数之初始化列表_哔哩哔哩_bilibiliC++成员初始化列表(构造函数后加冒号:){}(用于在构造函数中初始化类成员变量,可以避免使用构造函数体内的赋值语句,可以确保成员变量在对象构造之初就已经被正确初始化,提高代码的性能和可读性)_构造函数后面加冒号,跟成员变量-CSDN博客【C++】构造函数调用规则 ( 默认构造函数 | 默认无参构造函数 | 默认拷贝构造函数 | 构造函数调用规则说明 )-CSDN博客原创 2025-01-23 15:44:05 · 263 阅读 · 0 评论 -
c++构造函数篇
1 列表初始化2 拷贝构造函数3 赋值构造函数。原创 2025-01-23 15:35:56 · 149 阅读 · 0 评论 -
一级二级指针做形参
1 指针做形参,释放内存,是值传递只修改指针的指向,不修改指针本身。2 二级指针做函数形参,可以指向指针数据,表示多个变长数据。原创 2025-01-23 15:20:33 · 127 阅读 · 0 评论 -
std::async使用
是 C++ 中用于简化异步编程的工具,它适合多种场景,尤其是在需要异步执行任务并可能获取其结果时。对于文件读写、网络请求等 I/O 操作,通常会有较长的等待时间。如果异步任务中抛出了异常,异常会通过。可以将这些操作放到后台线程中执行,避免阻塞主线程。将这些任务放到后台线程中执行,避免阻塞主线程。当你有多个独立的任务需要并行执行时,可以使用。当你有需要长时间运行的计算任务时,可以使用。对于可以分解为多个子任务的问题,可以使用。并行执行子任务,然后在主线程中合并结果。实现生产者和消费者之间的协调后续使用。原创 2025-01-16 17:32:16 · 575 阅读 · 0 评论 -
模板类和模板函数
2 将类的声明和实现分离。原创 2025-01-02 10:34:31 · 181 阅读 · 0 评论 -
模版使用思考
函数模板提供了对函数的通用定义。可以在不同数据类型之间重用。类模板提供了对类的通用定义。可以实例化为不同的数据类型,具有更高的灵活性。首先,我们定义一个类模板Container,它有一个成员函数模板get,用于从容器中获取元素。这个类模板可以接收不同类型的对象。private:public:// 添加元素// 成员函数模板,用于获取元素// 类型转换。原创 2024-12-19 00:41:55 · 333 阅读 · 0 评论 -
条件编译->enable_if和 if constexpr使用区别
enable_if: 在类或函数模板的定义上决定能否实例化。这通常用于模板特化。: 在函数体内的条件编译,根据条件编译某些代码块。在选择时,如果想要基于类型启用或禁用功能,选择enable_if;如果你需要在函数内部进行条件逻辑,使用。是 C++17 中引入的一种条件编译的语法,它允许在编译时根据某些条件选择代码的路径。这种特性使得代码可以根据类型或模板参数在编译时进行选择,从而避免了在运行时进行不必要的判断和决策。在 C++11 中,因为没有,所以我们依靠模板特化和等技巧来实现条件编译的效果。原创 2024-12-12 13:39:26 · 1040 阅读 · 0 评论 -
cpp知识点
C++11 智能指针详解_c++ 11所有的智能指针-CSDN博客百度实习面试:new和malloc的区别,什么时候用new 什么时候用mallc? 使用模板特化来计算阶乘: 类型列表的计算使用 lambda 来生成类型列表的长度。编译时条件选择通过 lambda 选择类型。 lambda 可以在模板元编程中应用于多个场景,以下是一些额外的例子:使用 lambda 来计算一个类型序列中的最大值。示例 6: 计算类型的总和使用 lambda 动态计算类型的总和原创 2024-07-16 17:45:36 · 585 阅读 · 0 评论 -
去掉C/C++代码中的if-else-else if
状态模式是一种行为设计模式,它允许一个对象在其内部状态改变时改变其行为。策略模式是一种设计模式,它允许在运行时选择算法,而不是在编译时硬编码在代码中。在C++中,模板元编程是一种强大的工具,可以在编译时进行逻辑分支判断,从而避免运行时的。模板元编程通过在编译时选择类型,避免了运行时的条件判断,提高了性能和代码的可读性。在这个示例中,我们定义了一个函数指针数组,根据索引快速调用对应的函数,避免了多个。通过基类和派生类的多态机制,选择不同的处理方式。的好工具,特别是在需要对简单条件进行判断时。转载 2024-07-15 17:50:51 · 244 阅读 · 0 评论 -
为什么要有std::bind,std::bind具体应用场景
这对于将函数作为参数传递给其他函数或算法时非常有用,或者可以用于执行特定的逻辑或算法。预先绑定函数的一部分参数,然后在之后的调用中只提供其余参数。这使得代码更加灵活和模块化,尤其是当需要在不同的上下文中使用相同的函数但具有不同的部分参数时。还可以充当适配器(adapter),允许将不完全匹配的参数列表的函数转换为接受完整参数列表的函数。可以绑定类的成员函数或成员指针,并且可以与类的实例结合使用,使得在类的对象上调用成员函数更加方便。是C++标准库中的一个功能,用于绑定函数的参数。原创 2024-07-15 11:21:30 · 647 阅读 · 0 评论 -
如何在C++中使用不同类型的析构函数?
当类管理资源,如动态分配的内存、文件句柄或网络连接时,需要自定义析构函数以确保这些资源被适当释放。// 自定义析构函数释放资源 }};转载 2024-07-12 15:28:36 · 150 阅读 · 0 评论 -
C++成员函数末尾加 const 是什么意思?
在C++中,如果一个成员函数的目的是仅仅提供对对象状态的访问,而不改变对象的状态,那么就可以在这个函数的声明和定义后面加上const关键字。这样的成员函数称为“const成员函数”。转载 2024-07-12 15:11:22 · 1407 阅读 · 0 评论 -
window下tqdm进度条
原代码是linux下运行,修改后可在window下运行。原创 2024-07-12 14:10:35 · 597 阅读 · 0 评论 -
智能指针篇
shared_ptr为了支持跨线程访问,其内部有一个引用计数(线程安全),用来记录当前使用该资源的shared_ptr个数,在结束使用的时候,引用计数为-1,当引用计数为0时,会自动释放其关联的资源。就能够用来消除显式的使用 new,所以 std::make_shared 会分配创建传入参数中的对象, 并返回这个对象类型的 std::shared_ptr 指针。共享智能指针使用引用计数,每个shared_ptr的拷贝都指向相同的内存,在最后一个shared_ptr被析构的时候,内存被释放。原创 2022-12-02 10:38:44 · 513 阅读 · 0 评论 -
leecode 347:计数组中前K个高频元素
lecodee转载 2022-06-08 00:20:50 · 191 阅读 · 0 评论 -
拷贝构造函数调用问题
在link见到的一个问题代码:#include<iostream>using namespace std;class Complex{ private: double real; double imag; public: Complex(double r=0,double i=0) { cout<<" constructing···\n"; real=r; imag=i;原创 2022-01-27 16:14:41 · 795 阅读 · 0 评论 -
new和malloc区别
1 :new操作符内存分配成功时,返回的是对象类型的指针,类型严格与对象匹配,无须进行类型转换,故new是符合类型安全性的操作符。而malloc内存分配成功则是返回void * ,需要通过强制类型转换将void*指针转换成我们需要的类型。2:new内存分配失败时返回异常,malloc返回null3:malloc需要显式指定内存大小,new操作符申请内存分配时无须指定内存块的大小,编译器会根据类型信息自行计算;4new是编译器内提供,malloc是头文件函数link...原创 2021-12-24 10:40:39 · 531 阅读 · 0 评论 -
C/C++编程修养
我认为好的程序员应该有以下几方面的素质:1、有专研精神,勤学善问、举一反三。2、积极向上的态度,有创造性思维。3、与人积极交流沟通的能力,有团队精神。4、谦虚谨慎,戒骄戒燥。5、写出的代码质量高。包括:代码的稳定、易读、规范、易维护、专业。这些都是程序员的修养,这里我想谈谈“编程修养”,也就是上述中的第5点。我觉得,如果我要了解一个作者,我会看他所写的小说,如果我要了解一个画家,我会看他所画的图画,如果我要了解一个工人,我会看他所做出来的产品,同样,如果我要了解一个程序员,我想首转载 2021-12-11 10:24:59 · 250 阅读 · 0 评论 -
C++多线程:互斥锁
1.前言 比如说我们现在以一个list容器来模仿一个消息队列,当消息来临时插入list的尾部,当读取消息时就把头部的消息读出来并且删除这条消息。在代码中就以两个线程分别实现消息写入和消息读取的功能,如下:class msgList{private: list<int>mylist; //用list模仿一个消息队列 public: void WriteList() //向消息队列中写入消息(以i作为消息) { for (int i = 0; i<...转载 2021-09-15 11:19:01 · 2156 阅读 · 0 评论 -
指针那些事
空指针和 指向指针的指针空指针: 在 C/C++中,可以用 “NULL” 关键字对任何类型的指针进行赋值。值为 NULL 的指针,被称为 空指针。 空指针指向地址 0。一般来说,程序不需要,也不能在地址 0 处进行读写。 如:int * pn = NULL; char * pc = NULL;1 // 一般写法2 int a;3 int * pa = &a;4 int ** ppa = &pa;指向指针的指针: 如果一个指针里存放的是另一个原创 2021-09-13 01:45:49 · 155 阅读 · 0 评论 -
数组和vector中min_element,max_element,count_if
#include <algorithm>#include <iostream>#include <vector>using namespace std;struct structs{ bool operator() (int i, int j) { return i<j; }} structs;//此处也可以直接用bool bools(int i, int j) { return i<j; }void main(){ int .原创 2021-06-30 09:55:18 · 642 阅读 · 0 评论 -
c++小知识点
1. 数组做形参int FindMax(int* array);int FindMax(int array[]);int FindMax(int array[10]);原创 2021-06-10 10:14:18 · 137 阅读 · 0 评论 -
指针函数和函数指针
1 指针函数指的是函数返回对象为一个指针/* * 指针函数的定义 * 返回值是指针类型int * */ int *f(int a, int b) { int *p = (int *)malloc(sizeof(int)); memset(p, 0, sizeof(int)); *p = a + b; return p; } int main(){ int *p1 = NULL; p1 = f(1, 2);原创 2021-06-09 10:16:26 · 94 阅读 · 0 评论 -
指针数组
最近在cuda编程时候经常用使用指针访问,尤其是指针数组,下面是摘自问答,醍醐灌顶。https://zhidao.baidu.com/question/77829296.html指针数组就是说是一个数组,数组中的每一个成员是一个指针。举例如下:char *a[5]={"tan","li","cheng","fang","zheng"};定义指针数组a,存放姓名,a有5个成员,即a[5]是包含5个指针元素的指针数组,5个指针中每个的值是该字符串的首地址,也就是说a[0]=字符't'的地址a[1原创 2021-03-26 15:19:35 · 239 阅读 · 0 评论 -
c++stl之map
map是STL的一个关联容器,它提供一对一的hash。第一个值称之为关键字(key),每个关键字只能在map中出现一次;第二个称之为该关键字的对应值(value)。一般通过key来修改value;第一个可以称为关键字(key),每个关键字key只能在map中出现一次; 第二个可能称为该关键字的值(value); C++maps是一种关联式容器,包含“关键字/值”对begin()返回指向map头部的迭代器 clear()删除所有元素...原创 2020-11-30 01:06:24 · 380 阅读 · 0 评论 -
c++stl之stack
C++ Stack(堆栈) 是一个容器类的改编,为程序员提供了堆栈的全部功能,——也就是说实现了一个先进后出(FILO)的数据结构。c++ stl栈stack的头文件为:#include <stack>c++ stl栈stack的成员函数介绍操作 比较和分配堆栈 empty() 堆栈为空则返回真 pop() 移除栈顶元素 push() 在栈顶增加元素 size() 返回栈中元素数目 top() 返回栈顶元素栈(stack)是限制插入和删除只能在一个位置上进行的线性..原创 2020-11-28 21:58:49 · 389 阅读 · 2 评论 -
c++stl之vector
vector作为c++中最常用的数据结构,主要特点是便于随机访问,尾部快速插入和删除,当push_back检测到空间不足时,将自动以 2倍 的方式扩展空间。对于大量数据来说,这是一个弊端,可以使用可以使用 vector::reserve 方法来改善。主要操作如下:#include<vector> vector<int> a,b; a.assign(b.begin(),b.begin()+3); //b为向量,将b的0-2个元素赋值给向量a a.assign(4,2)..原创 2020-11-28 21:50:13 · 289 阅读 · 0 评论 -
c++stl之queue
queue 操作queue 只能访问 queue<T> 容器适配器的第一个和最后一个元素。只能在容器的末尾添加新元素,只能从头部移除元素。:front():返回 queue 中第一个元素的引用。如果 queue 是常量,就返回一个常引用;如果 queue 为空,返回值是未定义的。 back():返回 queue 中最后一个元素的引用。如果 queue 是常量,就返回一个常引用;如果 queue 为空,返回值是未定义的。 push(const T& obj):在 queue 的原创 2020-11-28 21:31:20 · 596 阅读 · 0 评论 -
c++stl之set
set集合是c++ stl库中自带的一个容器,set具有以下两个特点:1、set中的元素都是排好序的 2、set集合中没有重复的元素常用操作:begin() 返回set容器的第一个元素的地址 end() 返回set容器的最后一个元素地址 clear() 删除set容器中的所有的元素 empty() 判断set容器是否为空 max_size() 返回set容器可能包含的元素最大个数 size() 返回当前set容器中的元素个数 erase(it) ..原创 2020-11-28 21:34:08 · 439 阅读 · 0 评论 -
c++stl之list
vector :vector和built-in数组类似,拥有一段连续的内存空间,能非常好的支持随即存取,即[]操作符,但由于它的内存空间是连续的,所以在中间进行插入和删除会造成内存块的拷贝,另外,当插入较多的元素后,预留内存空间可能不够,需要重新申请一块足够大的内存并把原来的数据拷贝到新的内存空间。这些影响了vector的效率,但是实际上用的最多的还是vector容器,如果不需要去头部和中间插入删除等操作 建议大多数时候使用vector效率。list: list就是数据结构中的双向链表,因此...原创 2020-11-04 17:01:28 · 415 阅读 · 0 评论 -
c++的STL用法大全
# Standard Library 标准库# Standard Template Library 标准模板库## 1. 容器 containers## 2. 迭代器 iterators## 3. 算法 algorithms ## 4. 函数器 functional# 0.1 函数模板、类模板 与 * 乘法运算符 重载```c#include<iostream>// 函数模板template<typename T>T square(T x){ ...原创 2020-11-01 00:54:45 · 424 阅读 · 0 评论 -
vector的resize和reserve区别使用
vector动态分配内存,有时候效率低,因为提前分配好可以提高效率。1.reserve是容器预留空间,但并不是真正创建元素。2.resize是改变容器的大小,并创建对象。vector::reservevector::resize参考:https://www.pianshen.com/article/5109465785/...原创 2020-09-22 14:25:32 · 367 阅读 · 0 评论 -
c++ 数组使用
很基础的东西,做个笔记;#include<iostream>using namespace std;void main(){ int a[10] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }; //我们可以先去打印a[0] 与 a[9]之间的内存差看看效果 cout << &a[0] << " " << &a[1] << " " << &a[9] <&原创 2020-09-07 17:22:17 · 312 阅读 · 0 评论 -
opencv图像颜色直方图和HOG特征匹配
最近做了个小东西就是匹配猫和狗代码如下,用了一个map排序:#include <opencv2/opencv.hpp>#include <opencv2/dnn.hpp>#include <iostream>#include<fstream>#include<string>#include<map&g...原创 2020-05-07 16:36:55 · 1908 阅读 · 0 评论