c++
文章平均质量分 54
c++
CVer儿
开源让世界更美好
展开
-
如何在C++中使用不同类型的析构函数?
当类管理资源,如动态分配的内存、文件句柄或网络连接时,需要自定义析构函数以确保这些资源被适当释放。// 自定义析构函数释放资源 }};转载 2024-07-12 15:28:36 · 12 阅读 · 0 评论 -
C++成员函数末尾加 const 是什么意思?
在C++中,如果一个成员函数的目的是仅仅提供对对象状态的访问,而不改变对象的状态,那么就可以在这个函数的声明和定义后面加上const关键字。这样的成员函数称为“const成员函数”。转载 2024-07-12 15:11:22 · 12 阅读 · 0 评论 -
window下tqdm进度条
原代码是linux下运行,修改后可在window下运行。原创 2024-07-12 14:10:35 · 210 阅读 · 0 评论 -
智能指针篇
shared_ptr为了支持跨线程访问,其内部有一个引用计数(线程安全),用来记录当前使用该资源的shared_ptr个数,在结束使用的时候,引用计数为-1,当引用计数为0时,会自动释放其关联的资源。就能够用来消除显式的使用 new,所以 std::make_shared 会分配创建传入参数中的对象, 并返回这个对象类型的 std::shared_ptr 指针。共享智能指针使用引用计数,每个shared_ptr的拷贝都指向相同的内存,在最后一个shared_ptr被析构的时候,内存被释放。原创 2022-12-02 10:38:44 · 394 阅读 · 0 评论 -
leecode 347:计数组中前K个高频元素
lecodee转载 2022-06-08 00:20:50 · 152 阅读 · 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 · 741 阅读 · 0 评论 -
new和malloc区别
1 :new操作符内存分配成功时,返回的是对象类型的指针,类型严格与对象匹配,无须进行类型转换,故new是符合类型安全性的操作符。而malloc内存分配成功则是返回void * ,需要通过强制类型转换将void*指针转换成我们需要的类型。2:new内存分配失败时返回异常,malloc返回null3:malloc需要显式指定内存大小,new操作符申请内存分配时无须指定内存块的大小,编译器会根据类型信息自行计算;4new是编译器内提供,malloc是头文件函数link...原创 2021-12-24 10:40:39 · 468 阅读 · 0 评论 -
C/C++编程修养
我认为好的程序员应该有以下几方面的素质:1、有专研精神,勤学善问、举一反三。2、积极向上的态度,有创造性思维。3、与人积极交流沟通的能力,有团队精神。4、谦虚谨慎,戒骄戒燥。5、写出的代码质量高。包括:代码的稳定、易读、规范、易维护、专业。这些都是程序员的修养,这里我想谈谈“编程修养”,也就是上述中的第5点。我觉得,如果我要了解一个作者,我会看他所写的小说,如果我要了解一个画家,我会看他所画的图画,如果我要了解一个工人,我会看他所做出来的产品,同样,如果我要了解一个程序员,我想首转载 2021-12-11 10:24:59 · 213 阅读 · 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 · 2058 阅读 · 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 · 107 阅读 · 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 · 549 阅读 · 0 评论 -
c++小知识点
1. 数组做形参int FindMax(int* array);int FindMax(int array[]);int FindMax(int array[10]);原创 2021-06-10 10:14:18 · 99 阅读 · 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 · 54 阅读 · 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 · 186 阅读 · 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 · 305 阅读 · 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 · 322 阅读 · 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 · 241 阅读 · 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 · 515 阅读 · 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 · 383 阅读 · 0 评论 -
c++stl之list
vector :vector和built-in数组类似,拥有一段连续的内存空间,能非常好的支持随即存取,即[]操作符,但由于它的内存空间是连续的,所以在中间进行插入和删除会造成内存块的拷贝,另外,当插入较多的元素后,预留内存空间可能不够,需要重新申请一块足够大的内存并把原来的数据拷贝到新的内存空间。这些影响了vector的效率,但是实际上用的最多的还是vector容器,如果不需要去头部和中间插入删除等操作 建议大多数时候使用vector效率。list: list就是数据结构中的双向链表,因此...原创 2020-11-04 17:01:28 · 364 阅读 · 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 · 349 阅读 · 0 评论 -
vector的resize和reserve区别使用
vector动态分配内存,有时候效率低,因为提前分配好可以提高效率。1.reserve是容器预留空间,但并不是真正创建元素。2.resize是改变容器的大小,并创建对象。vector::reservevector::resize参考:https://www.pianshen.com/article/5109465785/...原创 2020-09-22 14:25:32 · 309 阅读 · 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 · 255 阅读 · 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 · 1815 阅读 · 0 评论 -
c++自定义类 学习
#include<iostream>using namespace std;template<class T>class Time{public: Time() { _y = 0, _m = 0, _d = 0; } Time(int x, int y, int z) { _y = x, _m = y, _d = z; } friend Time o...原创 2020-03-15 23:09:54 · 277 阅读 · 0 评论 -
c++多线程学习--互斥锁的使用
mutex和lock_guard对公共资源访问不加锁:#include <iostream>#include <thread>#include <mutex>using namespace std;int g_i = 0;mutex g_mutex;void c(){ for (int i = 0; i < 20; ++i) ...原创 2020-04-23 18:09:35 · 311 阅读 · 0 评论 -
c++多线程记录学习
1. 重要概念:参考链接:https://blog.csdn.net/m0_37621078/article/details/88608675C++11新标准多线程支持库< thread > :包含std::thread类以及std::this_thread命名空间。管理线程的函数和类的声明;< atomic > :包含std::atomic和std::atom...原创 2020-02-11 23:40:42 · 213 阅读 · 0 评论 -
c++自定义命名空间
circle.h#pragma once#include<iostream>#include<opencv2\opencv.hpp>#include<vector>using namespace cv;using namespace std;namespace wzl { class Circle { public: //默认构造函数 Circle(); ~Circle(); Circle(Point p, float r);.原创 2020-11-19 11:47:09 · 670 阅读 · 0 评论 -
C++创建本地UDP通信
1.https://blog.csdn.net/yanzhenbo1/article/details/543403632.https://www.pianshen.com/article/7560198605/首先需要在vs配置上述,不然会报错。client代码://UdpNetClient.cpp#include <Winsock2.h>#include ...原创 2020-03-13 14:05:16 · 693 阅读 · 0 评论 -
c++实现Python中listdir
原地址:https://zhuanlan.zhihu.com/p/85094140#include <iostream>#include <string>#include <io.h>#include<vector>using namespace std;void getFiles(string path, vector<s...转载 2019-12-12 17:16:31 · 1124 阅读 · 0 评论 -
【cpp中的虚函数与继承个人笔记总结】
https://www.cnblogs.com/jianyungsun/p/6361670.html继承:继承主要实现重用代码,节省开发时间。1、C#中的继承符合下列规则: 继承是可传递的。如果C从B中派生,B又从A中派生,那么C不仅继承了B中声明的成员,同样也继承了A中的成员。Object类作为所有类的基类。 派生类应当是对基类的扩展。派生类可以添加新的成员,但不能除...转载 2018-10-12 00:02:48 · 324 阅读 · 0 评论 -
[C ++的STL笔记---有搬运】
1. list list 由双向链表(doubly linked list)实现而成,元素也存放在堆中,具有双链表结构;每个元素都是放在一块内存中,其内存空间可以是不连续的,维护一对前向和后向指针,通过指针来进行数据的访问,因此支持前向/后向遍历。这个特点使得它的随机存取变得非常没有效率,因此它没有提供 [] 操作符的重载。但是由于链表的特点,它可以很有效率的支持任意地方的插入和...原创 2018-10-15 16:10:04 · 248 阅读 · 0 评论 -
c++值传递、指针传递、引用传递
值传递:形参是实参的拷贝,改变形参的值并不会影响外部实参的值。从被调用函数的角度来说,值传递是单向的(实参->形参),参数的值只能传入,不能传出。当函数内部需要修改参数,并且不希望这个改变影响调用者时,采用值传递。指针传递:形参为指向实参地址的指针,当对形参的指向操作时,就相当于对实参本身进行的操作引用传递:形参相当于是实参的“别名”,对形参的操作其实就是对实参的操作...转载 2019-02-15 17:09:42 · 166 阅读 · 0 评论