![](https://img-blog.csdnimg.cn/c7466ead1ce04cafb908730a53e06dc0.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
C++
文章平均质量分 83
从入门到入土
山顶夕景
实践出真知
展开
-
【C++】从入门到入土
学习总结(1)通过C++网络图了解C++学习路线脉络;通过c++在线编译工具,可快速进行实验: https://www.bejson.com/runcode/cpp920/;查阅小白教程:C语言中文网的C++入门教程、光城哥的C++教程。(2)已完成的部分:(离港篇)引用类型、const关键字、函数新特性、内存管理;(封装篇上篇)构造函数、析构函数;(继承篇前部分)共有&保护&私有集成;(多态篇前部分),其余部分要马上完成,像虚函数、友元函数等多看看,面试常考。文章目录学习总结第一篇原创 2021-04-19 16:28:37 · 1186 阅读 · 2 评论 -
【微信WXG面试】C++后端开发
文章目录一、项目提问1.1 epoll和select的区别1.问题的引出2.解决方案区别(epoll相对select优点):1.2 epoll中et和lt的区别与实现原理:LT(level triggered)ET (edge-triggered)1.3 对套接字编程的理解,协议如何1.4 阻塞&非阻塞1.5 文件描述符小结:Linux中一切皆文件二、C++基础2.1 成员变量,虚函数表指针的位置是怎么排布?2.2 必须使用初始化列表的时候2.3 智能指针三、408基础3.1 进程的死锁3.2 为啥原创 2022-02-17 23:28:31 · 1510 阅读 · 0 评论 -
C/C++基础知识整理
C++面试重点1.STL 容器相关实现2.C++新特性的了解3.多态和虚函数的实现4.指针的使用文章目录C++面试重点1.私有属性和保护属性2.C++程序的组成3.C++程序的编写思路4.const说明5.OOP的基本概念6.参数传递方式7.OOP的基本特征8.辨析重载9.对象数组和对象指针10.继承:公有、私有、保护11.this指针12.面向对象的机制:13.派生类与继承14.static静态成员(数据&函数)15.const常引用:16.派生类对基类成员的其他访问方法:17.构造函数原创 2021-03-21 12:46:15 · 2283 阅读 · 4 评论 -
C++网络图
文章目录一.初级-语法&OOP二.进阶① C++进阶之STL② C++进阶之设计模式③ C++进阶之数据结构基础④ C++进阶之UI界面开发⑤ C++进阶之Unix/Linux网络服务器⑥ C++进阶之数据库开发C++语言一.初级-语法&OOP面向对象编程思想;类的封装,构造和析构、静态成员、对象管理;类的构造(有参构造函数、无参构造、拷贝构造、默认构造函数)和析构;对象动态管理、友元函数、友元类、操作符重载;C++编译器对象管理模型分析;类对原创 2021-01-27 00:33:59 · 931 阅读 · 1 评论 -
C++后端开发面试
秀哥的C++学习线路2019年8月:hello world,就记得opp的多态。黑马视频《C++ 入门视频》1.5倍数,做笔记和作业,只是最基本的C++常用知识;《C++Primer 5th》3个月过一遍,这本书相当不错,共分为 19 章:前 8 章为变量、循环等基本知识,第 9-12 章为标准库的知识比如容器算法等,第 13-19 章为设计、拷贝、重载等知识。纸质书上做笔记。2019年12月买来《Effective C++》、《More Effective C++》、《STL 源码剖析》、《深度原创 2021-01-15 00:02:46 · 2791 阅读 · 0 评论 -
C++刷题常用STL容器总结
1.vector动态数组,方便动态扩容,方便的变量初始化(int类型默认初始化为0,bool默认初始化为false),可以用来实现邻接表(结点数太多的图)。头文件#include<vector>using namespace std;定义//typename可以是基本数据类型/其它标准STL容器/自定义结构体vector<typename>name;vec...原创 2020-01-22 12:47:43 · 1640 阅读 · 2 评论 -
【小白篇】Vscode配置Python和C++环境 | 远程连接服务器
之前用pycharm写的python,vscode略显轻量级,操作:Ctrl+Shift+P 或者 View > Command Palette,输入Python: Select Interpreter,选择python解释器(可以使用anaconda的环境)安装插件:在这里插入图片描述可以在terminal交互/运行代码:terminal->new terminal二、配置C++环境之前学习C++都是在VS上跑代码,也可以使用更轻量级的vscode,vscode只是一个文本编辑器,仅需要安原创 2023-08-02 14:34:56 · 2769 阅读 · 2 评论 -
【LeetCode1114】按序打印(多线程,信号量)
文章目录一、题目二、思路三、代码一、题目二、思路第一次在leetcode上做这种多线程题目,对于这种“同步”问题,需要明白线程在哪里需要阻塞(对应PV操作中的P),再找对应的V部分(释放资源)。并且题目这里不要求考察临界资源的访问(互斥关系),只需要考虑同步关系。先想的printB之前需要阻塞,因为需要等A完成打印,所以此处需要Pa操作(如下图),而V部分是资源释放的地方,即A打印后需要Va,即唤醒B可以开始打印了。B和C之间的关系同理。a同步信号量:可以理解为是B要获取的A打印后的资源,初值为原创 2022-03-18 23:18:09 · 889 阅读 · 0 评论 -
【C++11】Smart Pointer 智能指针
文章目录一、为啥使用智能指针呢二、shared_ptr智能指针三、unique_ptr智能指针四、weak_ptr智能指针五、智能指针怎么解决交叉引用,造成的内存泄漏5.1 交叉引用的栗子:5.2 解决方案六、智能指针的注意事项Reference一、为啥使用智能指针呢标准库中的智能指针:std::auto_ptr --single ownership (C++98中出现,缺陷较多,被摒弃)std::unique_ptr --single ownership (C++11替代std::au原创 2022-03-13 20:33:33 · 2130 阅读 · 0 评论 -
【C++基础】运算符重载
文章目录一、为啥要搞运算符重载二、一个栗子三、运算符重载注意事项Reference一、为啥要搞运算符重载我们平时用的C++也好,还是其他语言预定义好的运算符,一般都是限定于基本数据类型,如整型变量的加法int c = a+b等,但是操作的数据类型是我们自定义的时候(如类)就不能用预定义运算符,这时就需要用到运算符重载了。回顾C++的动态联编和静态联编:(1)静态联编支持的多态性称为编译时多态性,也称静态多态性。编译时多态性是通过函数重载(包括运算符重载)和模板实现的。(2)动态联编所支持的多态性原创 2022-03-13 17:54:50 · 1558 阅读 · 0 评论 -
【算法岗面试】某小厂D机器学习
文章目录1.__call__魔法方法(完成)(1)使实例对象变为可调用对象(2)弥补hasattr()函数短板(3)再来一个栗子2.yield的用法3.C++的左值和右值引用(没答上)4.input=8*8,filter=3*3,stride=1,padding=1卷积结果5.GBDT的特征怎么选择6.智能指针怎么解决交叉引用,造成的内存泄漏(1)交叉引用的栗子:(2)解决方案7. C++多线程了解不?(1)并行和并发的概念:(2)并发的基本方法(3)C++11中的并发与多线程8.头文件functional原创 2022-03-06 00:06:53 · 3047 阅读 · 2 评论 -
【C++面试】编译内存相关
本task是关于C++ 程序的编译过程、内存以及头文件的一些知识点,重点在内存方面进行展开,包括内存的分区、内存对齐、内存泄漏、内存泄漏的防止方法、现有的检测内存泄漏的工具等等。由于问题之间的关联性,可能有些问题并非是本章相关的知识点,例如一些问题涉及到了类中的虚函数、创建类的对象的底层原理等等,但为了保持问题上下的连贯性,也放在了这里。文章目录1. C++ 程序编译过程2. C++ 内存管理3. 栈和堆的区别4. 全局变量、局部变量、静态全局变量、静态局部变量5. 全局变量定义在头文件中有什么问题原创 2022-02-01 14:11:51 · 2206 阅读 · 0 评论 -
【C++】面向对象之封装篇(上)
学习总结(1)文章目录学习总结一、封装篇(上)3.1 类和对象、类对象定义3.2 初始字符串类型3.2.1 string类型3.2.2 初始化string对象的方式3.2.3 string的常用操作3.2.4 代码实践3.3 属性封装的艺术3.3.1 数据的封装通过函数来封装数据成员:3.3.2 封装的好处3.3.3 代码实践3.4 类内定义与类外定义3.4.1 类内定义类内定义与内联函数的关系3.4.2 类外定义1.同文件类外定义2.分文件类外定义(重点)3.5 对象的生原创 2022-02-02 15:14:25 · 1256 阅读 · 0 评论 -
【C++】面向对象之封装篇(下)
文章目录二、封装篇(下)4.1 对象数组与对象成员(1)对象数组(2)对象成员4.2 深拷贝与浅拷贝【栗子1】成员变量没有指针【栗子2】成员变量多了一个指针【深浅拷贝代码实践】4.3 对象指针、对象成员指针(1)对象指针(2)对象指针代码实践(3)对象成员指针(4)内存中的对象成员指针(5)对象成员指针代码实践4.4 this指针4.5 const进阶4.6 常指针和常引用(1)对象的引用和对象的指针(2)对象的常引用和常指针Reference二、封装篇(下)4.1 对象数组与对象成员原创 2022-02-27 11:52:13 · 1148 阅读 · 0 评论 -
【C++面试必问】static静态成员
文章目录一、静态成员二、静态成员变量三、静态成员函数四、访问静态成员的方式五、小结一、静态成员即在定义前面加上static关键字的成员。#include<iostream>using namespace std;class A{public: A(int a, int b): m_a(a), m_b(b){ num += m_a + m_b; } ~A(){} void Fun(); // 不同成员函数 static void PrintNum(){ // 静态原创 2022-02-09 11:41:17 · 1092 阅读 · 1 评论 -
【C++基础】引用的用法、const常量引用
文章目录1.1 引用的基本使用1.2 引用的注意事项1.3 引用作函数参数1.4 引用作函数返回值1.5 常量引用1.1 引用的基本使用作用:给变量起别名,新别名指向的是同一块内存。语法:数据类型 &别名 = 原名#include<iostream>using namespace std;//引用,给变量起别名int main(){ int a = 10; int &b = a; cout << "a = " << a <&原创 2022-02-22 10:16:59 · 1066 阅读 · 0 评论 -
【C++面试】啥时候必须用初始化列表
小结使用初始化列表能够提高程序运行效率。除了性能问题之外,有些时候合初始化列表是不可或缺的,以下几种情况时必须使用初始化列表const常量成员,因为常量只能初始化不能赋值,所以必须放在初始化列表里面引用类型,引用必须在定义的时候初始化,并且不能重新赋值,所以也要写在初始化列表里面没有默认构造函数的类类型,因为使用初始化列表可以不必调用默认构造函数来初始化,而是直接调用拷贝构造函数初始化文章目录小结一、初始化列表的定义二、构造函数的两个阶段三、使用初始化列表的原因四、必须使用初始化列表的原创 2022-02-11 13:21:28 · 1544 阅读 · 0 评论 -
【C++】面向对象之继承篇
学习总结(1)实例化Worker对象的时候,到底是先调用谁的构造函数——先基类的构造函数,即要想实例化一个派生类,必须先(隐性)实例化一个基类。在销毁Worker这个对象的时候,又是先调用谁的析构函数——是先子类的析构函数(和构造函数的顺序相反)。(2)子类继承了父类后,观察是否继承了父类的数据成员和成员函数。Worker对象,子类可以访问父类的成员函数eat(),也可访问自己的成员函数work()。文章目录学习总结一、继承(1)内存中的对象(2)继承代码实践头文件Person.h头文件Wor原创 2022-02-03 16:07:12 · 1657 阅读 · 0 评论 -
【C++】面向对象之多态篇
学习总结多态:无论发送消息的对象属于什么类,它们均能发送具有同一形式的消息,对消息的处理方式可能随接收消息的对象而变。C++通过虚函数实现多态,即在基类中用virtual声明,并在派生类中定义。虚函数:“虚假”的函数,父类引用子类对象,子类成员函数重写父类方法(函数)。虚函数一旦被定义后,在同一类族的类中,所有与该虚函数具有相同参数和返回值类型的同名函数都将自动成为虚函数(无论是否加上关键字virtual)。如基类的函数是虚函数时,则所有子类、子类中的子类的对应函数都是虚拟的。必须掌握的有:6.1原创 2022-02-06 16:40:23 · 1197 阅读 · 0 评论 -
【C++面试】虚函数和纯虚函数
小米二面在牛客网上的C++面筋题。1. 虚函数和纯虚函数的区别因为写代码时不能在一开始就确定被调用的是基类的函数,还是哪个派生类的成员函数,所以C++通过虚函数实现多态,即在基类中用virtual声明,父类可以引用子类对象,子类成员函数可以重写父类方法(函数)。虚函数的核心理念就是通过基类访问派生类定义的函数。析构函数应当是虚函数,将调用相应对象类型的析构函数,因此,如果指针指向的是子类对象,将调用子类的析构函数,然后自动调用基类的析构函数。定义一个函数为虚函数,不代表函数为不被实现的函数。定原创 2022-02-08 21:44:33 · 1571 阅读 · 0 评论 -
【阿里面试】C++多态和虚函数
文章目录一、C++的面试常考点二、阿里真题2.1 现在假设有一个编译好的C++程序,编译没有错误,但是运行时报错,报错如下:你正在调用一个纯虚函数(Pure virtual function call error),请问导致这个错误的原因可能是什么?(1)虚函数表vtbl(2)构造一个派生类对象的过程(3)析构一个派生类对象的过程2.2 在构造实例过程当中一部分是初始化列表一部分是在函数体内,你能说一下这些的顺序是什么?差别是什么和this指针构造的顺序2.3 初始化列表的写法和顺序有没有什么关系?2.4原创 2022-02-13 16:38:45 · 1186 阅读 · 1 评论 -
【C++面试】小厂S测试题
文章目录1.析构函数能否为虚函数2.Linux查看内存命令3.单例模式的类可以在类外构造对象吗4.git拉取代码5.进程间通信的方式6.STL用什么访问容器的数据7.构造函数能否为虚函数8.C++函数传参的3种形式9.Linux C++多线程同步的四种方式10.为了实现多态,构造子类对象时会生成啥表11.tcp协议位于哪一层12.C++中含有纯虚函数的类是什么类13.智能指针shared_ptr内部使用了什么机制对内存进行管理14.qt中点击一个按钮时,我们会期待自定义的某个函数被调用,这是什么机制Refe原创 2022-02-26 11:01:58 · 738 阅读 · 0 评论 -
【LeetCode剑指offer58】I.翻转单词顺序(istringstream)
一、题目说明:无空格字符构成一个单词。输入字符串可以在前面或者后面包含多余的空格,但是反转后的字符不能包括。如果两个单词间有多余的空格,将反转后单词间的空格减少到只含一个。二、思路记录一个C++的API。在处理有空格的字符串时,可以很方便地使用C++的istringstream,istringstream对象可以绑定一行字符串,然后以空格为分隔符把该行分隔开来,所以也能满足题目的“输入字符串可以在前面或者后面包含多余的空格,但是反转后的字符不能包括”要求。如果是在完整文件中需要用的头文件是#i原创 2022-02-12 10:37:28 · 746 阅读 · 0 评论 -
Visual studio调试的快捷键
文章目录一、常规断点调试二、调试时查看内存三、快速监视窗口一、常规断点调试F9:光标到某一行,按F9可以给该行设置断点,或者取消断点;F5:执行程序到第一个断点停下;F10:逐过程,一行行执行,但是函数那些算一块执行;F11:逐语句,可进入函数一行行执行;Shift + F11:可跳出当前的函数二、调试时查看内存一个很简单的指针常量栗子:#include <iostream>using namespace std;int main(){ int a = 3;原创 2022-02-10 11:18:41 · 2814 阅读 · 0 评论 -
【C++】动态数组
一、动态数组回顾计算机内存中按照用途被划分的5个区域://存储在栈int x=0;int *p=NULL; //存储在堆区,注意这里的数组名为p,而不是int(关键字int)int *p=new int[20];//全局区存储全局变量和静态变量//常量区string str="hello";//代码区存储逻辑代码的二进制那啥时候我们需要定义动态数组呢?【答】很多情况下,在预编译过程阶段,数组的长度是不能预先知道的,必须在程序运行时动态的给出但是问题是,c++要求定义数原创 2022-01-20 11:25:50 · 2457 阅读 · 0 评论 -
结构体构造函数
1.构造函数(1)只要参数和类型不完全相同,就可以定义任意多个构造函数,以适应不同的初始化场合。(2)构造函数不需要写返回类型,且函数名与结构体名相同。(3)结构体内会生成一个默认的构造函数(但不可见,如studentInfo(){}),如下,所以才可以直接定义studentInfo类型的变量而不进行初始化(因为它没有让用户提供任何初始化参数)。构造函数:struct studentInfo{ int id; char gender; //默认生成的构造函数 studentInfo(int原创 2021-01-19 11:01:11 · 5404 阅读 · 3 评论 -
C++ STL之unordered_map和unordered_set
unordered_map和map(set)(1)unordered_map在头文件#include <unordered_map>中,而unordered_set在头文件#include<unorder_set>中。(2) map 会按照键值对的键 key 进行排序(set里面会对按照集合中的元素大小进行从小到大的排序),而unordered_map (或者 unordered_set )省去了这个排序的过程。【注意】如果偶尔刷题时候用map 或者 set 超时了,可以考虑用原创 2021-01-03 08:49:57 · 1190 阅读 · 0 评论 -
vector的find及迭代器使用
vector本身没有find方法,是利用了头文件algorithm#include<iostream>#include<algorithm>//注意要加这个#include<vector>int main(){ using namespace std; vector<int> vec; vec.push_back(1); vec....原创 2020-01-09 18:37:17 · 1340 阅读 · 0 评论 -
二叉树前序非递归遍历
/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; *//*前...原创 2019-07-19 09:14:53 · 2311 阅读 · 0 评论 -
二叉树中序非递归遍历
/*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode(int x) : val(x), left(NULL), right(NULL) {}* };*/cla...原创 2019-07-19 09:24:12 · 263 阅读 · 0 评论 -
二叉树非递归后序遍历
/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; *//*后...原创 2019-07-19 10:58:43 · 8101 阅读 · 0 评论 -
二叉树层次遍历
/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; *//*二...原创 2019-07-19 15:24:56 · 621 阅读 · 0 评论 -
完全二叉树的检验
/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; *//*完...原创 2019-07-19 22:06:38 · 339 阅读 · 0 评论 -
寻找二叉树公共祖先结点递归实现
/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; *//*寻...原创 2019-07-20 07:41:20 · 1916 阅读 · 0 评论 -
满二叉树.根据前序求后序
#include <cstdio> #include <iostream>using namespace std;#define N 100void pre2post(char pre[] , int preL,int preR , char post[] , int postL , int postR){ if(preL <= preR)...原创 2019-07-20 11:18:26 · 334 阅读 · 0 评论 -
STL反转函数reverse
#include<iostream>#include<stdio.h>#include<stdlib.h>#include<math.h>#include<string>#include<algorithm> #include<map>#include<vector>#include...原创 2019-08-04 10:10:11 · 379 阅读 · 0 评论 -
scanf输入tips
#include<iostream>#include<stdio.h>#include<stdlib.h>using namespace std; //scanf为%c格式时可以读取换行,空格等/*scanf当其他格式的时候(不包括正则表达式), 如果空格或者换行出现在前面,会被读取并抛弃在后面的时候,不会读取,而只是检测。比如缓冲中是 空...原创 2019-08-05 03:21:19 · 192 阅读 · 0 评论 -
高精度加法
#include<iostream>#include<stdio.h>#include<stdlib.h>#include<math.h>#include<string.h>#include<algorithm> #include<map>#include<vector>#inclu...原创 2019-08-09 22:19:48 · 236 阅读 · 0 评论 -
C++11的stoi & stod
#include <iostream> #include <string>using namespace std;int main(){ string str="123"; int a=stoi(str); //如果遇到非法输入,stoi会自动截取最前面的数字,知道遇到不是数字为止 //所以说如果是浮点数,会截取前面的整数部分 cout << ...原创 2019-08-13 11:04:16 · 11918 阅读 · 0 评论