C++
文章平均质量分 57
C++
得克特
深度学习 python
展开
-
C++: iterator rbegin不变性
int main(){ map<int, int> mp{ {-2,-2},{2,2} }; auto iter = mp.rbegin(); cout << iter->first <<iter->second << endl; mp[3] = 4; cout << iter->first << iter->second << endl; auto iter原创 2021-05-26 12:51:00 · 152 阅读 · 0 评论 -
C++:函数返回引用或者指针
C++ 有三种传递方式:值传递,指针传递,引用传递返回**“值”和返回“引用”**是不同的函数返回值时会产生一个临时变量作为函数返回值的副本,而返回引用时不会产生值的副本,既然是引用,那引用谁呢?引用一个局部变量引用一个局部变量,是不可行的。string& toString(const int& n) { string s; stringstream ss; ss << n; ss >> s; return s;}原创 2021-05-17 13:49:09 · 3181 阅读 · 0 评论 -
C++11 Lambda表达式(匿名函数)
文章目录语法Lambda的类型Lambda的作用范围可变 lmabdasLambda的大小性能std::functionstd::function的大小Lambdas是匿名函数的一个花哨的名称。本质上,它们是在代码中的逻辑位置编写函数(如回调)的一种简单方法。类似:[](){}std::sort(v.begin(), v.end(), [](int a, int b) { return a > b; });语法Lambdas包含三部分capture list 代码用到需要copy到la翻译 2021-05-14 14:20:00 · 124 阅读 · 0 评论 -
C++: static
文章目录局部变量全局变量函数面向对象静态数据成员静态成员函数总结局部变量编译器一般不对普通局部变量进行初始化,也就是说它的值在初始时是不确定的,除非对其显式赋值。普通局部变量存储于进程栈空间,使用完毕会立即释放。静态局部变量使用static修饰符定义,即使在声明时未赋初值,编译器也会把它初始化为0。且静态局部变量存储于进程的全局数据区,即使函数返回,它的值也会保持不变。变量在全局数据区分配内存空间编译器自动对其初始化其作用域为局部作用域,当定义它的函数结束时,其作用域随之结束stat转载 2021-05-11 21:01:00 · 117 阅读 · 0 评论 -
C++: 问题集锦
编译重定义默认参数 : 参数 1此问题为函数的声明和定义对某个变量重复赋初值,只需要将声明部分赋的初值删除就可以排除问题重定义默认参数 : 参数 1 解决方案原创 2021-05-11 19:49:32 · 53 阅读 · 0 评论 -
C++: ios::sync_with_stdio(false)和cin.tie(0)
cin,cout之所以效率低,是因为先把要输出的东西存入缓冲区,再输出,导致效率降低,而这段语句可以来打消iostream的输入输出缓存,可以节省许多时间,使效率与scanf与printf相差无几。cin.tie与sync_with_stdio加速输入输出[ACM学习心得]关于sync_with_stdio(false);...原创 2021-05-04 16:36:19 · 210 阅读 · 0 评论 -
C++: 左值、左值引用、右值、右值引用
本文内容来自C++ primer,记录一下。引用(reference)分为左值引用和右值引用,通常我们说引用,指的是左值引用。左值引用引用为对象起了另外一个名字,引用类型引用另外一种类型,通过将声明符写成&d的形式来定义引用类型,其中d是声明的变量名:int ival = 1024;int &refVal = ival;int &refVal2;//Declaration of reference variable 'refVal2' requires an initia原创 2021-04-26 00:20:05 · 615 阅读 · 0 评论 -
C++: 数组初始化
文章目录栈动态数组赋值memsetfill栈数组是底层数据类型,存放在栈中,其内存的分配和释放完全由系统自动完成.通过如下代码初始化一个数组,初始化的规则就是不足数组大小的按默认值补位int a[5]; //int默认0int b[5] = {1,2}; // {1,2,0,0,0} 不足5位的0补位string c[5] = {"a", "b"}; // {"a","b","","",""}如果不明确指出初始化列表,那么基本类型是不会被初始化的(全局变量、静态变量外); 类类型如strin原创 2021-04-25 22:43:08 · 5963 阅读 · 0 评论 -
C++和python: priority_queue优先队列
参考c++优先队列(priority_queue)用法详解这里只记录下使用方式。priority_queue包含在头文件queue中,与通常的queue不同的就在于可以自定义其中数据的优先级,让优先级高的排在队列前面,优先出队,插入的效率为logn。优先队列具有队列的所有特性,包括基本操作,只是在这基础上添加了内部的一个排序,它本质是一个堆实现的top 访问队头元素empty 队列是否为空size 返回队列内元素个数push 插入元素到队尾 (并排序)emplace 原地构造一个元素并插入原创 2021-04-22 23:25:58 · 303 阅读 · 0 评论 -
C++: iterator
迭代器是一个变量,可以指向容器中的某个元素,通过迭代器就可以读写它指向的元素。从这一点上看,迭代器和指针类似。迭代器类别迭代器按照定义分为以下四种正向迭代器 容器类名::iterator 迭代器名;指向常量的正向迭代器 容器类名::const_iterator 迭代器名;反向迭代器 容器类名::reverse_iterator 迭代器名;指向常量的反向迭代器 容器类名::const_reverse_iterator 迭代器名;*迭代器名就表示迭代器指向的元素。通过非常量迭代器还能修改其指向原创 2021-04-14 19:47:31 · 378 阅读 · 0 评论 -
c++:unordered_map hash
c++中有unordered_map和unordered_set这两个数据结构,其内部实现是哈希表,这就要求作为键值的类型必须是可哈希的,比如常见的数据类型int、string等。但在很多应用中我们可能需要用到比较复杂的类型作为键值,比如vector、pair<int,int>,乃至自定义的类,这时候就需要手动编写两个类作为创建该数据结构对象时的参数,具体我们来看一下。现在我想让pair<int,int>作为unorderd_map的键值,需要编写两个类,每个类中分别包含一个函数,原创 2021-04-01 19:27:22 · 864 阅读 · 0 评论 -
C++: const
关键字 const 是一个限定符,它告诉编译器将该变量设置为只读。const修饰的准则是先左后有使用const定义变量时必须进行初始化,不能先定义再通过赋值语句进行赋值const 修饰变量、指针、函数修饰变量,表示常量修饰指针,则指针指向不可变,指向的值可以变修饰类函数,表示类成员变量不可变C++ const用法详解...原创 2021-04-09 15:15:47 · 128 阅读 · 0 评论 -
c++: i++还是++i
刚开始学C语言时,increment的前缀形式++i有时叫做“增加然后取回”,后缀形式i++叫做“取回然后增加”。但是for循环里我们看到有用i++,也有用++i,执行效率有什么区别吗?来看下increment的定义// 前缀形式:增加然后取回值UPInt& UPInt::operator++(){ *this += 1; // 增加 return *this; // 取回值}// postfix form: fetch and incrementconst UPInt UPI原创 2021-04-08 13:55:23 · 210 阅读 · 0 评论 -
Opencv遍历Mat的方式
文章目录Mat遍历坐标模式指针迭代器Mat遍历坐标模式.at<typename>(i,j)for(int i=0;i<img.rows;i++) { for(int j=0;j<img.cols;j++) { //.at<Vec3b>(i,j)取出三通道的点 .at<uchar>(i,j)取出灰度图像的点 image.at<Vec3b>(i,j原创 2021-04-07 18:41:43 · 567 阅读 · 0 评论 -
记录一次c++实现图片颜色聚类的小需求
安装visual studio 2019安装c++的IDE Visual Studio 2019安装与使用配置opencv环境VS配置OpenCV开发环境(c++):How & Whywindows下OpenCV的安装配置部署详细教程代码python实现的核心代码(这里读取的是四图层图片)def image_process(img, o_path, p): # 图像二维像素转换为一维 # 转换成3列 data = img[:, :, :3].reshape((-原创 2021-03-11 17:45:59 · 242 阅读 · 0 评论 -
c++ multiset
leetcode刷题会用到的multiset这种有序序列,可以包含重复元素,插入和删除的时间复杂度都为O(log(n)),常用的函数有insert 插入一个元素erase 可以删除一个元素,也可以传入指针,注意如果删除的是重复元素,会全部删除,如果不想全部删除,可以传入一个指针,像这样:ms.erase(ms.lower_bound(x));lower_bound 返回元素值 >= 当前数 的指针upper _bound 返回元素值 > 当前数 的第一个元素指针rbegin 返回一个原创 2021-01-11 23:25:54 · 414 阅读 · 0 评论 -
c++ debug
求数组大小当数组作为参数传入函数,在函数内int n = sizeof(nums)/sizeof(nums[0]);会报如下警告‘sizeof’ on array function parameter ‘nums’ will return size of ‘int*’ [-Wsizeof-array-argument]这里sizeof(nums)计算返回的是int指针的大小,所以很容易导致程序报Segmentation Fault exception‘sizeof’ on array functio原创 2020-07-30 15:09:16 · 768 阅读 · 0 评论 -
c++字符串与数字互转
字符串转数字int atoi(char* ptr)输入的是字符串指针,如果要输入字符串可以通过atoi(s.c_str()),先转为一个c指针再输入int stoi(string s)输入字符串数字转字符串to_string(int i)将数字转为字符串sstream后续更新...原创 2020-07-24 16:43:46 · 336 阅读 · 0 评论 -
c++ sstream
sstream定义了三个类:istringstream、ostringstream和stringstream分别用来进行流的输入、输出和输入输出操作由于sstream使用string对象代替字符数组,避免缓冲区溢出的危险;其次,因为传入参数和目标对象的类型会被自动推导出来,所以不存在错误的格式化符的问题。相比c库的数据类型转换,sstream更加安全、自动和直接。1.数据类型转换#inclu...转载 2020-01-14 11:33:21 · 5153 阅读 · 1 评论 -
c++ 单链表
很长时间没有接触单链表的算法题,正好借此题回顾一下给定一个链表,旋转链表,将链表每个节点向右移动 k 个位置,其中 k 是非负数。示例 1:输入: 1->2->3->4->5->NULL, k = 2输出: 4->5->1->2->3->NULL解释:向右旋转 1 步: 5->1->2->3->4-&g...原创 2020-01-14 11:04:17 · 163 阅读 · 0 评论 -
c++数据结构之vector
关于vectorvector数组是一个能存放任意数据类型(类,结构,普通变量类型等)的动态数组,在数据结构中就相当于顺序储存的线性表,寻找元素非常快,但是插入元素的时间却很大(list是一个双向链表,在同一个位置插入大量的数据时速度很快,但是查找的速度就会慢很多)和普通数组一样可以通过下标索引来进行访问与其它动态序列容器相比(deques, lists and forward_lists)...原创 2020-01-02 10:04:28 · 1647 阅读 · 1 评论 -
c++ 数组和vector的比较
数组、动态数组和vector数组是底层数据类型,存放在栈中,其内存的分配和释放完全由系统自动完成,效率最高;动态数组是程序员由new运算符创建的,存放在堆中,需由delete运算符人工释放,否则会内存泄露;vector,存放在堆中,由STL库中程序负责内存的分配和释放,使用方便。C++中数组是一种内置的数据类型,而vector为类模板,vector是类型相同的对象的容器。数组的大小不变...原创 2019-10-16 09:30:38 · 2159 阅读 · 0 评论 -
C/C++内存分配函数
malloc:原型:extern void *malloc(unsigned int num_bytes);头文件:在TC2.0中可以用malloc.h或 alloc.h (注意:alloc.h 与 malloc.h 的内容是完全一致的),而在Visual C++6.0中可以用malloc.h或者stdlib.h。功能:分配长度为num_bytes字节的内存块返回值:如果分配成功则返回指...原创 2019-09-25 11:16:43 · 1100 阅读 · 0 评论 -
C++的数据类型stack、map
stackStack(堆栈)是一个容器类的改变,为程序提供了堆栈的全部功能,实现了一个先进后出的数据类型。empty() 堆栈为空返回真;pop()移除栈顶元素;push()在栈顶增加元素;size()返回栈中元素;top()返回栈顶元素string字符串不用多做介绍,这里想记录一下一种for range的遍历方式#include<iostream>using ...原创 2019-09-19 09:41:32 · 578 阅读 · 0 评论 -
0xffffffff在不同情况下的输出
问题起源于next_random = next_random * (unsigned long long)25214903917 + 11;k1 = (next_random & 0xFFFF):保留next_random的低16位(最大65535);& 0xFFFF引起了我的兴趣,发现这个的操作是取低16位。然后我百度了下。发现。low16 = (unsigned s...原创 2019-08-07 10:39:38 · 2946 阅读 · 0 评论 -
c++ cin的使用说明
文章目录1.cin<<2.cin.get()3. cin.getline4. cin.ignorecin是C++编程语言中的标准输入流对象,即istream类的对象。在理解cin功能时,不得不提标准输入缓冲区。当我们从键盘输入字符串的时候需要敲一下回车键才能够将这个字符串送入到缓冲区中,那么敲入的这个回车键(\r)会被转换为一个换行符\n,这个换行符\n也会被存储在cin的缓冲区中...转载 2019-07-10 15:27:36 · 274 阅读 · 0 评论