C++
文章平均质量分 59
勿在浮沙築高臺
这个作者很懒,什么都没留下…
展开
-
VS2019遇到的坑——C4716
具体代码如下:bool operator!=(const _list_node_iterator & node2){//必须const? return this->node != node2.node;}在linux平台编译完全没问题,在vs2019上报C4716错误,缺少返回值错误错误出在注释结尾的?上,此?号为中文符号,改为英文符号?即可...原创 2021-12-29 21:48:18 · 1042 阅读 · 0 评论 -
CPP字典树写法
CPP字典树写法前言在网上查询了许久,并未找到C++的字典树的标准库,做题时经常用到,所以在此专门学习与写一个字典树,供以后使用描述1、采用哈希表当做树的节点2、用int 整型判断到达该节点是否为完整单词3、采用栈的方式删除单词Trie.h#ifndef CPPTRIE_TRIE_H#define CPPTRIE_TRIE_H#include <unordered_map>#include <stack>class Trie {private:原创 2021-09-18 16:35:56 · 423 阅读 · 0 评论 -
C++:uniform_int_distribution、rand()和mt19937随机数、partial_sum、容器最小值和最大值、accumulate
C++:uniform_int_distribution、rand()和mt19937随机数、partial_sum、容器最小值和最大值、accumulate1、uniform_int_distribution离散均匀分布类在均匀分布中,范围中内所有值都是等可能性的default_random_engine 是uniform_int_distribution的随机数种子参考12、rand()和mt19937随机数rand() 函数产生的随机数范围值是 0~32767,mt19937 产生几原创 2021-08-30 16:24:48 · 981 阅读 · 0 评论 -
iterator迭代器和指针的区别
迭代器与指针的差别:迭代器: (1)迭代器不是指针,是类模板,表现的像指针。他只是模拟了指针的一些功能,通过重载了指针的一些操作符,->,*,++ --等封装了指针,是一个“可遍历STL( Standard Template Library)容器内全部或部分元素”的对象,本质是封装了原生指针,是指针概念的一种提升(lift),提供了比指针更高级的行为,相当于一种智能指针,他可以根据不同类型的数据结构来实现不同的++,--等操作; (2)迭代器返回的是对象引用而...原创 2020-12-28 16:06:50 · 314 阅读 · 0 评论 -
c++学习笔记内联函数,函数重载,默认参数
c++学习笔记内联函数,函数重载,默认参数1 inline内联函数C++中的const常量可以替代宏常数定义,如: const int A = 3; #define A 3 C++中是否有解决方案替代宏代码片段呢?(替代宏代码片段就可以避免宏的副作用!)C++中推荐使用内联函数替代宏代码片段 C++中使用inline关键字声明内联函数内联函数声明时inline关键字必须和函数定义结合在一起,否则编译器会直接忽略内联请求。 //宏替换和函数调用区别说明1: 必须原创 2020-10-08 22:43:52 · 258 阅读 · 0 评论 -
C/C++学习笔记之指针体系
铁律1:指针是一种数据类型1)指针也是一种变量,占有内存空间,用来保存内存地址测试指针变量占有内存空间大小2)*p操作内存在指针声明时,*号表示所声明的变量为指针在指针使用时,*号表示 操作 指针所指向的内存空间中的值*p相当于通过地址(p变量的值)找到一块内存;然后操作内存*p放在等号的左边赋值(给内存赋值)*p放在等号的右边取值(从内存获取值)3)指针变量和它指向的内存块是两个不同的概念//含义1 给p赋值p=0x1111; 只会改变指针变量值,不会改变所指的内容;p = p +1;原创 2020-10-08 12:34:54 · 254 阅读 · 0 评论 -
详细的线程池讲解,手写C与C++版本
详细的线程池讲解,手写C与C++版本在此感谢苏丙榅的教程讲的很详细,我看了他的C版本教程,对线程池有了深刻理解,手写了C版本,并自主改了C++版本。线程池是消费者生产者模型的其中之一。这里面的线程城同步很重要,稍不注意就会造成死锁。主要用的是互斥锁mutex。学习线程池需要有线程的基础知识,比如线程创建,互斥锁,销毁线程,条件变量等等。接下来详细介绍线程池。首先来看下图,下图所示了单进程单线程系统处理任务的方式,很多任务任务进来时,需要排队处理:下面让我们看进程池的处理方式,看下图:在这里简单原创 2021-06-08 21:55:43 · 2288 阅读 · 12 评论 -
C++__min_element()和max_element()函数的使用
C++__min_element()和max_element()函数的使用今天在leetcode练习题目时遇到了min_element(),在此学习下min_element()与max_element()。1、min_element返回范围内的最小元素返回指向范围内最小值的元素的迭代器[first,last)。如果没有其他元素比一个元素最小,则该元素是最小的。如果有多个元素满足此条件,则迭代器返回指向此类元素中第一个的点。default (1) :template <class Forw原创 2021-05-07 17:11:36 · 3990 阅读 · 0 评论 -
C++右值引用与转移和完美转发
C++右值引用与转移和完美转发1、右值引用1.1右值lvalue 是 loactor value 的缩写,rvalue 是 read value 的缩写左值是指存储在内存中、有明确存储地址(可取地址)的数据;右值是指可以提供数据值的数据(不可取地址);通过描述可以看出,区分左值与右值的便捷方法是:可以对表达式取地址(&)就是左值,否则为右值 。所有有名字的变量或对象都是左值,而右值是匿名的。示例:double a = 13.14;double b = 1314;a += b;原创 2021-05-06 19:18:59 · 1679 阅读 · 2 评论 -
C++搞懂深拷贝初始化=与赋值(运算符重载)=的区别
C++搞懂深拷贝初始化=与赋值=的区别代码今天在学习右值引用时,遇到了深拷贝问题,以前也知道深拷贝与浅拷贝的区别,今天的疑问是,为什么不用重载=操作符在初始化时实现深拷贝,与赋值时=号的区别。#include <iostream>#include <functional>using namespace std;class Test{private: int *data; int s_size;public: Test(size_t size原创 2021-05-06 16:44:28 · 1281 阅读 · 0 评论 -
C++——运算符重载operator
C++——运算符重载operatorC++ prime plus第11章,运算符重载是C++的一种多态。运算符重载格式如下:operator运算符(argument-list)1、做普通函数重载示例:计算两个对象成员的和#include <iostream>using namespace std;class A{ private: int a; public: A(){ this->a=55; } int get_a()原创 2021-05-05 16:39:57 · 206 阅读 · 1 评论 -
C++——Lambda函数
4、Lambda函数lambda 表达式可以说是 c++11 引用的最重要的特性之一, 它定义了一个匿名函数, 可以捕获一定范围的变量在函数内部使用,一般有如下语法形式:auto func = [capture] (params) opt -> ret { func_body; };其中 func 是可以当作 lambda 表达式的名字,作为一个函数使用,capture 是捕获列表,params 是参数表,opt: 不需要可以省略。 (mutable: 可以修改按值传递进来的拷贝(注意是能原创 2021-04-29 14:49:10 · 9656 阅读 · 7 评论 -
C++——auto_ptr与unique_ptr
auto_ptr与unique_ptr的比较先介绍unique_ptr(独占智能指针)参考爱编程的大丙std::unique_ptr 是一个独占型的智能指针,它不允许其他的智能指针共享其内部的指针,可以通过它的构造函数初始化一个独占智能指针对象,但是不允许通过赋值将一个 unique_ptr 赋值给另一个 unique_ptr。示例:// 通过构造函数初始化对象unique_ptr<string> ptr1(new string(“aaa”));// error, 不允许将一个uni原创 2021-04-29 14:10:15 · 969 阅读 · 0 评论 -
C++——auto、decltype、返回类型后置、模板别名:using =、nullptr
1.3、声明1.3.1、auto以前版本关键字auto是一个存储类型说明符,表示动态存储还是静态存储,与static关键字对应,第九章也写了,C++11将其用实现自动类型推断(第三章)。必须显示初始化,让编译器能够将变量类型设置为初始值的类型。示例:#include "iostream"#include "stdio.h"#include "string"using namespace std;double f(int a,int b){return 0;}auto pf=f;int m原创 2021-04-29 13:41:26 · 276 阅读 · 0 评论 -
C++ ——统一初始化
C++11扩大了用大括号括起的列表(初始化列表)的适用范围,时期可用于所有内置类型和用户定义的类型(即类对象)。使用列表初始化时,可添加=,也可以不添加。例如:int x={5};double y {2.75};short quar [5] {4,5,2,76,1};另外,列表初始化语法也可以用于new表达式中:int *ar = new int [4] {6,6,6,6};创建对象时,也可以使用大括号(而不是圆括号)括起的列表来调用构造函数:class test{ private原创 2021-04-29 13:39:19 · 506 阅读 · 0 评论 -
C++——新类型与原始字面量(原始字符串)
1.1新类型C++11新增类型long long和unsigned long long,以支持64位(或者更宽)整型;新增了char16_t和char32_t以支持16位和32为字符表示;还新增了原始字符串。1.1.1原始字符串(原始字面量)在C++ Prime Plus(第六版) 104页中介绍了原始(raw)字符串。在编程中假如遇到了字符串“\n”,这里表示换行的意思,即"\n"表示的是一个字符——换行。那如果我们想表示一个'\'一个'\'该怎么办呢?在C语言中是这样写"\\n"。一个这样写很容原创 2021-04-29 13:35:09 · 407 阅读 · 0 评论 -
C++——包装器std::function与绑定器std::bind
C++——包装器std::function与绑定器std::bind1、可调用对象的包装器std::function是可调用对象的包装器。它是一个类模板,可以容纳除了类成员(函数)指针之外的所有可调用对象。通过指定它的模板参数,它可以用统一的方式处理函数、函数对象、函数指针,并允许保存和延迟执行它们。1.1基本用法使用std::function必须包含一个头文件叫做functional,具体语法如下#include <functional>std::function<返回值类型原创 2021-05-05 17:09:58 · 573 阅读 · 1 评论 -
C++中substr()函数用法详解
C++中substr()函数用法详解原型:string substr (size_t pos = 0, size_t len = npos) const;返回一个新构造的string对象,其值初始化为该对象的子字符串的副本。子字符串是对象的一部分,从字符位置pos开始并跨越len个字符(或直到字符串的结尾,以先到者为准)。pos:要复制为子字符串的第一个字符的位置。如果它等于字符串长度,则该函数返回一个空字符串。如果该长度大于字符串长度,则抛出out_of_range。注意:第一个字符由0原创 2021-04-29 15:04:01 · 1022 阅读 · 0 评论 -
C++——智能指针——auto_ptr、shared_ptr、unique_ptr
1.4、智能指针智能指针是行为类似于指针的类对象。C++11 中提供了三种智能指针,使用这些智能指针时需要引用头文件 :·shared_ptr;·unique_ptr;·auto_ptr;这三个智能指针模板都定义了类似指针的对象,可意义将new获得(直接或者间接)的地址赋给这种对象。当智能指针过期时,其析构函数将使delete来释放内存。智能指针是存储指向动态分配(堆)对象指针的类,用于生存期的控制,能够确保在离开指针所在作用域时,自动地销毁动态分配的对象,防止内存泄露。·weak_ptr;原创 2021-04-29 13:46:22 · 911 阅读 · 0 评论 -
二维数组指针表示
二维数组指针表示nt main(int argc ,const char **argv){ int a[2][4]={1,2,3,4,5,6,7,8}; cout<< *(a[1]+3)<<endl; cout<< *(*(a+1)+3)<<endl; return 0;}输出为 88相当于二级指针a[1]相当于*(a+1)a[1][3]相当于*(*(a+1)+3)...原创 2020-10-14 21:43:13 · 443 阅读 · 0 评论 -
C++类成员函数重载问题
类成员函数重载问题#include <iostream>using namespace std;class A{private: int a; int b;public: void AA(int a,int b)//一 {} void AA(int a,int b) const// 二 { a=1; b=1; } void AA(const int a,const int b) //三 { }}; int main(int argc ,const原创 2020-10-14 21:18:31 · 628 阅读 · 0 评论 -
nullptr和NULL
nullptr是c++11中的关键字,表示空指针要区分nullptr和NULL,首先要明白NULL的含义:NULL是一个宏定义,在c和c++中的定义不同,c中NULL为(void*)0,而c++中NULL为整数0//C语言中NULL定义#define NULL (void*)0 //c语言中NULL为void类型的指针,但允许将NULL定义为0//c++中NULL的定义#ifndef NULL#ifdef _cpluscplus转载 2020-10-10 20:59:40 · 615 阅读 · 0 评论