C++
文章平均质量分 53
szplzx1314
这个作者很懒,什么都没留下…
展开
-
多线程detach问题
实际上就是因为std::ref(num),这个转换发生在主线程结束之前,还是之后。如果发生在结束前,val结果就正常。如果发生在结束后,val值就是一个UB。运行可知,num的地址和val的地址不同,两个变量明显不是同一块内存。可是我本意目的就是要这个UB,但发现主线程中数据并没有发生改变。由于引用这个东西,本能的我就想到是因为引用的引用,导致这个问题。昨晚无意间敲少敲了&引用,于是出现了子线程中值UB的问题。线程如果先结束,回收num,val还是会改变。于是各种试验,反汇编,查询无果。原创 2023-05-09 13:49:58 · 176 阅读 · 1 评论 -
C++可变参数宏
C++可变参数宏原创 2023-04-28 11:43:42 · 161 阅读 · 0 评论 -
C++真是一门...的语言
发现结果和想象中的不一样,我以为这个after表示的是在fl的迭代器后插入。到这里,瞬间感觉为了迎合一个before_begin,真是不容易啊。于是就特别费解,明明都是左闭右开的形式。突然出现一个左开右开的形式。一直都没有发现,今天偶然用了一下forward_list。在要一个链表插入到另一个链表时使用splice_after。原来他是fl2.begin()的后一个开始插入。看到还有其他形式于是试了一下。原创 2023-03-28 17:47:45 · 166 阅读 · 0 评论 -
C++ 中new的使用(new operator, operator new, placement new)
不知道有没有一直看下来的,接下来就是网络编程,然后lua,数据库。再搞源码,操作系统(视频很多跟着敲一下大概了解就可以了), stl, 智能指针。然后服务器,性能,负载。然后简单的看下设计模式,刷刷OJ,996就向你招手了。c++ primer一定要翻一遍,面试的时候稍微有难度的问题回答的不好。态度好一点,虚心点反而不是问题,反而基础问题没有回答上来基本拜拜。尤其大厂。...原创 2022-07-11 10:23:07 · 397 阅读 · 0 评论 -
标准模板库 algorithm(全部函数)
这个东西虽然函数众多但是我会把它搞全.比较开发中都是用他.正确性有保障,代码的可读性也会大大增加.头文件:#include <algorithm>adjacent_find(查找相邻元素)查找相邻的两个元素,可以用谓词改变查找规则.成功返回查找到第一个元素的迭代器,失败返回尾部迭代器.#include <iostream>#include <algorithm>#include <vector>using namespace st原创 2021-10-09 23:32:59 · 1978 阅读 · 2 评论 -
模板简介(这个东西用好了是神,但是有几个神呢)
本想把容器搞的全一点.有感觉实在没啥意义.都不如去刷两道题了.所以就不搞了.模板这个东西吧,用的好了很方便.但是这个东西一旦出现错误实在太难找了,对与新手来说更是噩梦.了解它主要是为了了解泛型编程,和为了之后数据结构.因为拿C++写嘛,一定要用到模板.模板作用就是把功能相同类型不同的 函数 类 变成通用类型.语法template <typename 形参名,typename 形参名2>template <class 形参名,class 形参名2>两个原创 2021-10-07 21:37:18 · 418 阅读 · 0 评论 -
STL C++11 forward_list(单链表)
#include <iostream>#include <forward_list>using namespace std;int main(){ //构造函数 forward_list<int> f; forward_list<int> f2(3, 4); //3 个 4 forward_list<int> f3(f2.begin(), f2.end()); // 迭代器区间赋值 forward_.原创 2021-10-06 12:51:42 · 155 阅读 · 0 评论 -
STL C++11 array(固定大小的数组)
#include <iostream>#include <array>using namespace std;int main(){ array<int, 5> a = { 1,2,3,4,5 }; //填充 a.fill(0); //返回首地址指针 auto p = a.data(); cout << *p << endl; //0 //索引 a.at(2) = 3; cout << a.at.原创 2021-10-06 11:45:14 · 238 阅读 · 0 评论 -
容器的选择
容器容器是面向对象的基础,所有面向对象的语言都有容器.在C++中也就是标准模板库也就是常说的STL.容器分为三类顺序容器顺序容器是元素间有顺序关系的线性表,每个元素都有固定位置.不会提供特点进行排序,元素的顺序和插入的时间位置有关.关联容器关联容器以键值的方式来保存数据容器适配器这东西其实就是容器的容器,结果还是容器.如果容器时普通类型的模板,那么容器适配器就是容器的模板.各容器特点顺序容器vector ...原创 2021-10-06 10:19:48 · 140 阅读 · 0 评论 -
容器适配器
容器适配器时基于容器实现的新容器.容器是配置分为三种stack头文件:#include <stack>对应数据结构中的栈,有先进后出的特性.来自deque,,可用顺序容器vector,list,deque.queue头文件:#include <queue>对应数据结构中的队列,有先进先出的特性.来自deque,可用顺序容器list,deque.容器必须提供前插(push_front())运算priority_queue头文件:#includ原创 2021-10-06 09:23:36 · 69 阅读 · 0 评论 -
STL set(集合)和multiset(多重集合)
set(集合)和multiset(多重集合)set是键的集合,当需要知道一个值是否存在的时候使用set再合适不过.set不能进行下标操作.set是唯一内的值是唯一的,multiset中的值可以不唯一.构造函数#include <iostream>#include <set>using namespace std;bool funcComp(int val, int val2){ return val > val2;}class Com原创 2021-10-06 07:43:06 · 104 阅读 · 0 评论 -
STL 映射(map)和多重映射(multimap)
map和multimapmap提供优秀的一对一数据处理能力.元素是由key和value两部分组成的队组.key是唯一的.给定一个key,就能确定相对的value.map也叫关联数组,只是索引的方式是key不是整数.map是一个有序的不允许key重复的容器,默认为升序.multimap是一个有序的允许key重复的容器,默认为升序.其余map和multimap完全相同.初始化,遍历#include <iostream>#include <map>原创 2021-10-04 01:21:17 · 431 阅读 · 0 评论 -
顺序容器总结
顺序容器C++标准模板库提供三种vector,list,deque,其中vector和deque是数组,list是双向链表.向量(vector)一个动态容的顺序容器,连续的存储地址,可以通过[]来直接访问任意元素.相比list和deque,可以更快的索引,可以在尾部快速的删除和插入列表(list)一个双向链表,相对vector的联系空间,list复杂很多,它可以快速的插入和删除,但是随机访问比较慢.因为是链表实现,所以他不会造成空间浪费.双端队列(deque)dequ原创 2021-10-02 23:38:08 · 91 阅读 · 0 评论 -
STL 双端队列(deque)
双端队列(deque)deque(double ended queue,双向队列),和向量(vector)类似,可以头部的快速的插入和删除.同样支持随机访问其实他和vector差别很少,vector有capacity是容量,deque中没有.deque中有前插前删,vector中没有.在任何标准里其实也没有明确的说明何时何地选他们两个哪一个.初始化遍历deque#include <iostream>#include <deque>using names原创 2021-10-02 23:31:25 · 918 阅读 · 0 评论 -
STL 列表(list)
刚才看了一些vector然后我发现还是很乱,既然都很乱,之后容器还是写的全一点吧.列表(list)一个双向链表,相对vector的联系空间,list复杂很多,它可以快速的插入和删除,但是随机访问比较慢.因为是链表实现,所以他不会造成空间浪费.初始化(构造函数和分配值)#include <iostream>#include <list>#include <vector>using namespace std;int main(){ //原创 2021-10-02 20:55:38 · 204 阅读 · 0 评论 -
STL vector(向量)
目录向量(vector)构造函数修改函数(插入,删除,修改元素个数,清空)大小,容量,判空,迭代器,交换两个容器,对容器进行排序vector嵌套vector(二维向量)向量(vector)一个动态容的顺序容器,连续的存储地址,可以通过[]来直接访问任意元素.相比list和deque,可以更快的索引,可以在尾部快速的删除和插入构造函数#include <iostream>#include <vector>#include <strin原创 2021-10-01 22:42:18 · 123 阅读 · 0 评论 -
C++文件读写
文件的分类外部文件和内部文件外部文件 硬盘,U盘等,在磁盘上的文件都是外部文件.内部文件 在程序中运行使用的文件,也就是文件流对象,也就是内存中的数据文件分类文本文件 也就是ASCII文件,一个ASCII码就是一个字节二进制文件 就是计算机存储的原样放到磁盘上的文件也就是说111111,在文本文件中占6个字节(六个1每一个占一个字节),在二进制文件中占4个字节(一个int类型)文件流类及对象标准库...原创 2021-10-01 18:26:03 · 192 阅读 · 0 评论 -
C++输入输出
其实这个东西是真心没打算弄,实在没什么实际意义,如果真的需要printf不香嘛.但是国庆嘛,太闲了.所以就搞一下吧.函数形式原创 2021-10-01 01:18:21 · 199 阅读 · 0 评论 -
多态(虚函数,虚函数表,纯虚函数,虚析构函数,抽象类)
目录多态静多态动多态虚函数动态类型和静态类型静态类型动态类型(多态实现)虚函数表(vtable)定位虚函数虚函数初始化时间虚函数表的特点虚函数应用纯虚函数纯虚函数声明方法纯虚函数特点虚析构函数虚函数限制抽象类(虚基类这个好像是这么叫还是叫纯虚基类来着,记不清了.不过这个不重要)总结多态多态嘛,固然就是一个物体有多种形态,在C++中就是一个函数名,有多种功能.函数重载一般叫静多态,接下来介绍的就是动多态.静多态在.原创 2021-09-30 15:49:09 · 328 阅读 · 0 评论 -
继承(方式,构造顺序,析构顺序,切片,多继承)
目录继承继承方式public继承private继承protected继承继承中的构造顺序继承中析构的顺序派生类转换为基类切片问题继承就是一个类从另一个类获取数据成员和成员函数.B类继承A类,B类就有A的数据成员和成员函数.被继承的类称为基类(父类),继承的类称为派生类(子类).作用就是,减少代码量,方便之后修改代码.class 基类名{}class 派生类名 : 继承方式 基类名{}继承方式继承方式有 public pr原创 2021-09-29 21:06:54 · 139 阅读 · 0 评论 -
指向类成员的指针
目录指向数据成员的指针(了解)指向成员函数的指针(了解)指向成员函数的指针数组(了解)指向数据成员的指针(了解)#include <iostream>using namespace std;class A{public: A(int num, int num2) :m_a(num), m_b(num2) { } void aShow() { cout << m_a << " " << m_b <&l原创 2021-09-29 18:39:07 · 56 阅读 · 0 评论 -
auto和decltype
目录autodecltype总结autoC中的auto表示自动变量在C++(C++11)中他是类型推导,也就是更具数据自动确定其类型auto num = 11 + 22; //auto 是 intauto num = 11.11 + 22.22 //auto是double 对于const一般会忽略上层,保存底层,顶层的话可以手动添加const int a = 4;auto b = a; //aut...原创 2021-09-27 21:05:56 · 54 阅读 · 0 评论 -
this指针补充,const补充,static补充,static const int
对象调用函数与this指针(this指针补充)每个对象数据有自己的数据,存储空间,函数代码会共享.这样可以节约空间,通过this指针来传递每个对象数据.const补充const修饰数据成员(初始化成员列表)#include <iostream>using namespace std;#if 0class A{public: A(int a) { //m_a = a; //error 不可修改的左值 } void aShow() { cout ..原创 2021-09-27 19:52:41 · 135 阅读 · 0 评论 -
string类的基本实现
/* 功能实现: string str; //无参构造 创建一个新对象时调用string str2 = "hello world" //有参构造str2 = str; //赋值构造 两个已有对象赋值时调用string str3(str); //拷贝构造 一个已有对象初始化另一个对象时调用cout << str << endl; //<<运算符重载cin >> str; //.原创 2021-09-27 01:03:42 · 89 阅读 · 0 评论 -
局部变量做返回值,拷贝构造函数发生时机,传递引用和传递对象区别, 返回引用和返回变量
目录局部变量做返回值拷贝构造函数发生时机传递引用和传递对象区别返回引用和返回变量局部变量做返回值函数执行过程是main函数先压栈然后函数,出栈的顺序相反,返回值会产生匿名变量(作为中间变量),至于这个变量内存哪里不同编译器(不同大小)的存储位置可能不同,不需要关心.拷贝构造函数发生时机用一个对象初始化一个新对象时.作为函数参数传递作为函数返回值传递引用和传递对象区别以引用作为函数参数传递时,不会调用拷贝构造函数.(传引用相当于扩大原变量的作用域)返回.原创 2021-09-26 13:06:49 · 161 阅读 · 0 评论 -
完整的类(无参构造函数,有参构造函数,拷贝构造函数,赋值运算符重载,析构函数)
之所以又发一遍,是因为前面好像写的有问题(其实有没有我也忘了,记得好像是有点小问题),至于原因嘛,就是是懒.(毕竟我只是为了从头再走一遍做下笔记而已)但是我怕万一有小伙伴看到了产生误导就不好了,误人子弟的事做了亏心啊.所以就把它单独拿出来发了一下.#define _CRT_SECURE_NO_WARNINGS#include <iostream>using namespace std;class Student{public: //无参构造函数 Student()原创 2021-09-26 02:03:59 · 272 阅读 · 0 评论 -
拷贝构造函数,this指针,赋值运算符重载,完整的类
因为需要用到拷贝构造函数(可以理解为构造函数的一种)若不提供系统会提供默认拷贝构造函数,如果提供则系统不会在提供.系统提供的默认的拷贝构造函数是浅拷贝.原创 2021-09-26 01:52:47 · 201 阅读 · 0 评论 -
类,构造函数,析构函数
目录学生类构造函数析构函数构造函数调用时机析构函数调用时机类也是一种复杂的自定义数据类型,它将不同的数据类型和数据操作封装在一起.和结构体不同的是结构体只是封装数据,没有封装数据操作.类中的数据也叫数据成员,数据的操作也叫成员函数.class是定义类的关键字,类的成员在权限上分为,公有(public),私有(private)和保护(protected)三种C++中类的成员默认是private属性(私有的),外部不能随意访问.结构体中可以认为是public属性(公有的),.原创 2021-09-24 14:31:25 · 467 阅读 · 0 评论 -
string(超详细哦)
string是一个类,里面定义很多成员函数,因为后续需要,只能现把这个说了.STL留到最后再说构造函数#include <iostream>#include <string> //C++中的string类 string 也在标准std中//#include <cstring> //c中的string.h//#include <string.h> //同上using namespace std;int main(){ string s原创 2021-09-23 21:17:54 · 217 阅读 · 0 评论 -
命名空间,内联函数,强制类型转换
目录命名空间标准命名空间自定义命名空间命名空间也可以嵌套命名空间.内联函数C++中的强制类型转换static_castreinterpret_castconst_castdynamic_cast(转换失败的时候会返回null(在C++中他就是个0))命名空间昨天睡觉时,突然想起来命名空间还没有说.其实命名空间就是为了防止命名冲突.经常是用的 using namespace std;using 使用 namesapce 名空间 std(standard)原创 2021-09-23 14:05:51 · 153 阅读 · 0 评论 -
new delete
new delete不能继续使用malloc free,等到类的时候free不可以完成工作,这个之后再说变量#include <iostream>using namespace std;struct A{ int num; int num2;};int main(){ //为num在堆上开辟空间 int* num = new int; *num = 10; cout << num << end原创 2021-09-23 00:23:19 · 42 阅读 · 0 评论 -
默认参数 引用
目录默认参数要注意函数重载和默认参数的二义性引用不过引用实际上也不分配内存.(从某种程度上也可以说这货就没有定义)可以对引用再次引用(一个变量会有多个别名),但是不能有引用的引用(实际上就是不能有二级引用)交换两个变量指针有引用,但是没有引用的指针(引用没有空间,他也就没有地址(个人理解))上面太乱看这个还有引用类型需要一一对应(const 和 引用)默认参数C++可以给函数参数赋默认值只能从最右向左赋值,中间不能跳过.#include <iost原创 2021-09-22 16:42:21 · 240 阅读 · 0 评论 -
对C的类型增强,格式化输出,重载
目录C++对C的类型增强constbool类型枚举枚举应用表达式赋值标准输入输出格式化输出重载函数重载重载规则(静多态)匹配原则重载原理运算符重载其实C已经过去了,这里就直接开始C++的进阶了.推荐两本书吧.effective C++more effective C++这两本书的内容我会进行整理放入C++技能整理中,不过由于时间关系这或许会是一个漫长的过程C++对C的类型增强const在C中const是一个龙套角色,在.原创 2021-09-21 21:44:29 · 93 阅读 · 0 评论 -
C++技能整理
在C++中null表示0,空指针用nullptr 在class中const成员变量时加上static只会有一份实体 不允许static,可以声明enum enum取地址不合法,可以阻止指针和引用指向其成员变量 enum和define不会产生非必要内存分配 不允许类内定义,可以在类外定义 在C++中,尽可能的使用const ...原创 2021-08-25 00:41:39 · 157 阅读 · 0 评论