![](https://img-blog.csdnimg.cn/20201014180756738.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C++
C++学习之路
芯辰大海
这个作者很懒,什么都没留下…
展开
-
C++笔记-八股
关键字inline 必须与函数定义体放在一起才能使函数成为内联,仅将inline 放在函数声明前面不起任何作用。inline函数的实现应放在头文件中。否则在其他源文件调用时需要重写内联函数定义。// inline 仅与函数声明放在一起inline void Foo(int x, int y) {} // inline 与函数定义体放在一起。原创 2023-11-22 09:27:13 · 288 阅读 · 0 评论 -
c++ STL stack容器
c++ stack容器原创 2022-12-05 16:41:08 · 567 阅读 · 0 评论 -
c++: std::is_pointer::value
is_pointer是位于头文件下的模板。该模板用于检查给定类型T是否为指针类型。它返回一个布尔值,如果给定类型是指针变量,则返回true,如果给定类型不是指针变量,则返回false。模板只能具有类型T的参数,并检查给定类型是否为指针。原创 2022-11-26 11:10:05 · 547 阅读 · 0 评论 -
c++11 std::chrono
【代码】c++11 std::chrono。原创 2022-11-24 10:05:00 · 1477 阅读 · 0 评论 -
vscode:cannot open output file main.exe: Permission denied
ctrl+shift+esc打开任务管理器,找到 main.exe进程,点击【结束任务】没有终止正在运行的main.exe文件;原创 2022-11-18 18:43:38 · 2124 阅读 · 0 评论 -
vscode 输出乱码问题
必须到main函数文件下点击running code。原因:在vector.h文件中直接运行code;原创 2022-11-17 09:20:11 · 275 阅读 · 0 评论 -
c++ delete[]和delete的区别
的分配。两者不同;原创 2022-11-16 21:47:21 · 506 阅读 · 0 评论 -
c++初始化列表
成员属性为x, y, z。原创 2022-09-25 16:22:15 · 1004 阅读 · 0 评论 -
C++11 使用using定义类型别名
这样我们在定义该结构体类型变量时,就可以使用MS作为类型名了。我们也可以使用#define来定义别名(使用预处理器)格式为:using 别名=数据类型。转载 2022-09-21 15:06:14 · 1082 阅读 · 1 评论 -
centos VS code中gdb调试无法显示STL内容的问题(仅显示内存地址信息)
若没有安装svn 先进行安装(注意安装目录的位置)在.gdbinit文件中添加以下代码。原创 2022-09-15 18:42:21 · 961 阅读 · 0 评论 -
centos更新gdb版本
3、生成makefile(进入gdb解压后的文件目录)4、将编译好的gdb拷贝到/usr/bin目录中。2、下载gdb指定源码包并解压;5、查看安装后gab版本信息。1、卸载原始版本gdb。原创 2022-09-15 10:05:39 · 2000 阅读 · 3 评论 -
c++ 使用情景
map 中的元素是按照key有序存储,其底层数据结构是 红黑树 ,查找、插入、删除的 时间复杂度均为 O(logN);原创 2022-07-31 19:49:45 · 191 阅读 · 0 评论 -
一些c++ case
clause.clear();与clauses.push_back(clause);可以及时释放不用暂存空间;其中stdvectorclauses;利用break推出此次循环,进入下一次循环;原创 2022-07-28 19:40:12 · 751 阅读 · 0 评论 -
全局变量&局部变量
全局变量:其作用范围是“整个工程”,只需在一个源文件中定义,就可以作用于所有的源文件。当然,其他不包含全局变量定义的源文件需要用extern 关键字再次声明这个全局变量 静态全局变量:使用 static 关键字修饰,也具有全局作用功能,和全局变量区别在于如果该程序包含多个文件,其作用范围仅在定义的那个文件,不能作用于其它文件,这样即使两个不同的源文件都定义了相同名字的静态全局变量,它们也是不同的变量 局部变量:仅仅从定义的位置开始,到定义它的右花括号结束,只在函数执行期间存在,函数的一次调用原创 2022-06-22 16:53:51 · 774 阅读 · 0 评论 -
STL的容器中存储对象和指针
STL的容器中既可以存储对象,也可以存储指针;STL容器的工作方式:1. 对基本数据类型,位拷贝;2. 对自定义的类类型对象,调用Copy构造函数,复制一份;STL容器中 存放指针与对象区别 遍历删除与释放操作_虫虫虫虫子的博客-CSDN博客c++中我相信大家经常要用到STL里面的各种容器来存放自己的数据,既然我们用的这么频繁那么就相应该有一些疑问?https://blog.csdn.net/AC_huang/article/details/29382629原创 2022-06-01 10:48:46 · 561 阅读 · 0 评论 -
c++ 类成员函数前、后、参数前加const
构造函数&析构函数:构造函数:编译器自动帮我们在对象创建时进行初始化操作,原创 2022-06-01 10:21:45 · 2830 阅读 · 3 评论 -
c++ vector容器emplace_back
为在容器操作时尽可能的减少构造函数的调用和内存的拷贝,C++11 引入了emplace_back的方法,该方法可以改善往容器内推入对象元素时的效率。相比push_back,可以节省一次拷贝构造函数的调用从而提高插入效率; push_back() 向容器尾部添加元素时,首先会创建这个元素,然后再将这个元素拷贝或者移动到容器中(如果是拷贝的话,事后会自行销毁先前创建的这个元素);而 emplace_back() 在实现时,则是直接在容器尾部创建这个元素,省去了拷贝或移动元素的过程; em..原创 2022-05-31 17:02:22 · 7451 阅读 · 0 评论 -
#define VAR(x) (((x) > 0) ? (x) : (-(x)))——c++
#include <iostream>using namespace std;#define POSITIVE(x) ((x) > 0) //x为正数,输出为1;x为负数,输出为0#define NEGATIVE(x) ((x) < 0) //x为正数,输出为0;x为负数,输出为1#define VAR(x) (((x) > 0) ? (x) : (-(x))) //输出x的绝对值int main(){ int a = 9; int b = .原创 2022-05-18 10:41:28 · 211 阅读 · 0 评论 -
关于指向数组的指针(c++测试)
数组名是数组首地址;指针指向数组内存空间首地址;#include <iostream>using namespace std;int main(){ int atomNum = 10; int* nodeStatus = new int[atomNum]; for (int i = 0; i < atomNum; i++) nodeStatus[i] = i; int ptr = 1; cout << nodeStatus << e.原创 2022-05-17 15:25:56 · 175 阅读 · 0 评论 -
c++文件输入输出流fstream指定文件路径正确书写
1、直接复制文件路径读取文件流(❌错误的,无法读取成功)fstream afile;//afile.open("E:\C++\test", ios::out | ios::in); 复制test的路径只会复制到文本test的上一层afile.open("E:\C++\test\test.txt", ios::out | ios::in); //这是test.txt正确路径2、fstream文件流读取,路径名中的斜杠要双写,如:"D:\\MyFiles\\ReadMe.txt"原创 2022-05-16 14:50:31 · 8207 阅读 · 0 评论 -
gdb大型工程项目调试(工程中包含多个.cpp文件)
gdb调试大的工程项目第一步:添加选项参数-g,生成带有编译信息的可执行文件打开CMakelists.txt文件; 添加参数选项-g,修改后保存;第二步:cd 进入build文件,执行make命令,重新编译;第三步:配置launch.json文件,进行调试program填写工程项目文件的绝对路径;args填写运行可执行文件需要输入多个命令:如运行 ./sat_atpg /home/hhh/benchmark/isca85/c17.bench;args填写输入文件的绝对原创 2022-05-08 13:21:07 · 4148 阅读 · 0 评论 -
运算符重载c++(完整测试代码)
运算符重载一般格式:@表示要重载的运算符;若是重载"="则@用“=”替换;若是重载"+"则@用“+”替换;参数表根据运算符的操作数个数决定;单目or双目;c++中可重载运算符如下:c++中有下列5个运算符不可重载:重载运算符使用规则:运算符重载两种形式:成员运算符函数;友元运算符函数;对于同一运算符,要么定义为成员,要么定义为友元;不可二者都定义;运算符重载为友元函数:友元才能访问类的私有属性;案例1:友元方式重载运算符“+”、“==”#原创 2022-05-04 14:33:27 · 988 阅读 · 0 评论 -
linux下VScode完整项目开发流程 (详细配图/可测试代码)
目录项目需求合理设置项目目录编写项目源文件先对gun类进行设计,创建对应的.h文件和.cpp文件;设计士兵类,创建相应的soldier.h和soldier.cpp构建main.cpp调用soldier.cpp和gun.cpp中两个类的实现函数;g++方式编译工程文件CMake方式编译工程文件在工程文件顶层目录创建并编写CMakeLists.txt;创建build文件,并进入build;执行cmake ..执行make命令运行生成的target文件m...原创 2022-04-16 09:40:00 · 3045 阅读 · 0 评论 -
CMake编译工程/第一个CMakeLists.txt(最详细案例演示)
在 linux 平台下使用 CMake 构建C/C++工程的流程:手动编写 CmakeLists.txt。 执行命令 cmake PATH 生成 Makefile ( PATH 是顶层CMakeLists.txt 所在的目录 )。 执行命令 make 进行编译。当前项目目录结构有两个项目5.3.1和5.3.2最小CMake工程进入文件夹5.3.1,VScode打开项目文件5.3.1在项目5.3.1顶层目录中,New File一个CMakeLists.txt..原创 2022-04-15 16:37:58 · 21455 阅读 · 1 评论 -
在ubuntu中vscode创建第一个C++工程文件(详细案例)
第一个简单工程文件5.3mkdir一个文件,(c++以文件夹为工程单位)创建文件夹5.3,并用 vscode打开该文件夹;创建一个.cpp文件在VScode下打开终端并编译cpp文件ctrl+`——打开终端,g++编译cpp文件;并运行第一个多文件多目录的c++工程文件5.3.2创建文件夹5.3.2,并用VScode打开;新建文件夹include和srcinclude放头文件;src放源文件;右键include文件夹下点击new F..原创 2022-04-14 22:42:41 · 6568 阅读 · 2 评论 -
VScode基本介绍 (侧边栏/状态栏)
file按钮当前打开的文件夹Example_WorkerManageSystem的字母大写显示; OUTLINE——显示当前cpp 文件类名和函数名,可通过它进行定位函数和类; TIMELINE——若当前工程是用git进行管理时,TIMELINE中显示一些commit记录;直观的提供仓库的一些log;点击相应的log信息,就会显示对代码曾做过哪些更改;查找按钮输入workCtrl后,会自动显示所有跟workCtrl相关的东西,搜索框右边3个选项,其中:Aa区分大小写;Ab全词匹配;*正则表..原创 2022-04-14 18:59:06 · 6965 阅读 · 0 评论 -
第一个gdb命令行调式案例(详细举例)
目标:对sum.cpp文件进行调试;添加-g参数命令生成可调试文件gdb仅支持对编译时添加了-g的参数命令生成的文件进行调试; 生成的带有调试信息的文件a_yes_g明显比不带调试信息的文件a_no_g更大;命令:gdb filename 对可执行文件进行调试(启动gdb软件)对不带调试信息的文件a_no_g启动gdb调试显示不存在可调试信息:Reading symbols from a_no_g...(no debugging symbols found)...done..原创 2022-04-13 10:08:17 · 1197 阅读 · 0 评论 -
c++:链接静态库/静态库 生成可执行文件
tree .查看文件目录结构目标:将swap.cpp生成为一个静态库,并链接到main.cpp中,生成一个可执行程序文件;第一步:生成一个.o二进制文件——g++ swap.cpp -c -I../include因为swap.cpp对include文件下的swap.h文件有一个引用,所以要加参数命令-Iinclude;vim打开 swap.o文件查看,是二进制形式的内容第二步:将.o文件归档成一个.a静态库文件;——ar rs liaSwap.a swap.o..原创 2022-04-12 11:30:22 · 4400 阅读 · 0 评论 -
g++: -O 优化源代码
所谓优化,例如省略掉代码中从未使用过的变量、直接将常量表达式用结果值代替等等; -O 选项告诉 g++ 对源代码进行基本优化。这些优化在大多数情况下都会使程序执行的更快; -O 同时减小代码的长度和执行时间,其效果等价于-O1; -O0 表示不做优化; -O1 为默认优化; -O2 除了完成-O1的优化之外,还进行一些额外的调整工作,如指令调整等(最常用就是-O2);上述.cpp文件现经过-O2优化后生成的a_without_02程序文件更小通过time命令,输出程序运行时间,进行对比原创 2022-04-11 21:14:31 · 1579 阅读 · 1 评论 -
c/c++程序编译过程
C代码编译成可执行程序经过4步: 1.预处理(-E):宏定义展开、头文件展开、条件编译等,同时将代码中的注释删除,这里并不会检查语法; 生成.i文件 2.编译(-S):检查语法,将预处理后文件编译生成汇编文件; 生成.s文件 3.汇编(-c):将汇编文件生成目标文件(二进制文件); 生成.o文件 4.链接(-o):C语言写的程序是需要依赖各种库的,所以编译之后还需要把库链接到最终的可执行程序中去; 生成bin文件1、预处理:g++ -E test.cpp -o tes...原创 2022-04-11 20:11:26 · 4133 阅读 · 0 评论 -
c++:enum枚举数据类型(详细举例)
基本概念:枚举数据类型是一种由程序员定义的数据类型,其合法值是与它们关联的一组命名整数常量; 枚举类型(enumeration)是 C++ 中的一种派生数据类型,它是由用户定义的若干枚举常量的集合; 枚举类型的定义格式为:enum <数据类型名> {<枚举常量表>};//关键字enum——指明其后的标识符是一个枚举类型的名字;//枚举常量表——由枚举常量构成。"枚举常量"或称"枚举成员",是以标识符形式表示的整型量,表示枚举类型的取值。各枚举常量之间以","间隔原创 2022-04-11 15:33:53 · 10155 阅读 · 1 评论 -
c++: Logger日志信息
基本概念:日志可以记录正常软件运行过程中出现的信息和错误的信息,当我们定位问题,就打开相应的日志去查看,查找;日志的作用:在软件开发周期中,不管是前台后台,系统一般会采用一个持久化的日志系统来记录运行情况。在代码中嵌入log代码信息,主要记录下列信息:(1)系统运行异常信息。(2)系统运行状态信息。(3)系统运行性能指标。日志级别:一般分5个级别:ERROR(错误):此信息输出后,主体系统核心模块不能正常工作,需要修复才能正常工作。 WARN(警告):此信息输出后,原创 2022-04-11 10:49:03 · 1544 阅读 · 0 评论 -
bool operator==(const T& t) const,关系运算符重载
基本定义:bool operator ==( )可以分为——bool operator ==( const bool& other)、bool operator ==( const T& other), 其中T代表类型;运算符函数定义的一般格式如下:<返回类型说明符> operator <运算符符号> (<参数表>) { <函数体> }关系运算符重载:bool operator == (const T& )..原创 2022-04-10 11:06:24 · 5716 阅读 · 0 评论 -
C++: numeric_limits<T>::max() (用法举例)
概念:基本格式:std::numeric_limits<T>::max()——其中max()可替换为min()及lowest();T表示数据类型;std::numeric_limits<T>::max()——返回数据类型T的最大值;std::numeric_limits<T>::min()——返回数据类型T的"最小正数";std::numeric_limits<T>::lowest()——返回数据类型T的最小值(为负数或0);用法举例:原创 2022-04-10 10:02:36 · 9374 阅读 · 0 评论 -
c++ const引用传参
//const引用传递参数FaultManager(const CircuitGraph& circuit){ //函数体}void add_stem_fault(const Line& line){ //函数体}//形参是值传递void Slove(const vector<int> v){ //函数体}引用传递传递的是实参的地址,而值传递则是实参的拷贝,相当于把实参复制了一份; 对于STL容器、类或者结构体等的参数传递而言,使用引用..原创 2022-04-09 23:36:01 · 2735 阅读 · 0 评论 -
c++ 计时方法clock()、chrono::high_resolution_clock、system_clock(详细举例)
计时方法往往测试某一段代码/某个功能函数的运行时间;clock()常用的一种“传统”的计时方法clock(),其计时可以精确到毫秒,通过/CLOCKS_PER_SEC可将输出时间精度设置为”秒“#include<iostream>#include <unistd.h> //sleep()函数头文件using namespace std;#include<ctime>int main(){ clock_t start = cl...........原创 2022-04-09 16:00:46 · 11010 阅读 · 2 评论 -
C++ 智能指针unique_ptr
智能指针的引入C++11 提供了 3 种智能指针类型,它们分别由 unique_ptr 类、shared_ptr 类和 weak_ptr 类定义,又分别称它们为独占指针、共享指针和弱指针。 智能指针是一个可以像指针一样工作的对象,但是当它不再被使用时,可以自动删除动态分配的内存; 智能指针核心概念是动态分配内存的所有权;当需要让单个指针拥有动态分配的对象时,可以使用独占指针unique_ptr。 共享指针,记录有多少个指针共同享有某个对象的所有权; unique_ ptr、shared_ ptr原创 2022-04-09 11:50:10 · 474 阅读 · 0 评论 -
c++ int main(int argc, char* argv[ ])详解
main函数的参数列表保存了输入参数的信息,第一个参数argc记录了输入参数的个数,第二个参数是字符串数组的,字符串数组的每个单元是char*类型的,argv数组中的第一个单元指向的字符串总是可执行程序的名字,以后的单元指向的字符串依次是程序调用时的参数 argc是命令行总的参数个数,即argc记录了用户在运行程序的命令行中输入的参数总的个数; argv[ ]是argc个参数,其中第0个参数是可执行程序/文件的全名,其后跟的参数是用户的输入的参数; 举例:输入命令:./atpgSat ~/...原创 2022-04-08 19:57:59 · 1566 阅读 · 0 评论 -
链表操作(注意NOTE)
链表删除:1、讨论两种情况,删除节点为头节点or非头节点;2、两种方法,设置虚拟头节点与否;3、判断头节点是否为空 && 链表中存在与否与value相等的节点元素; (头节点为NULL是空链表)4、非头节点的删除,要从第一个节点开始,逐个查找至链表最后一个元素;需要设置一个指针来对链表进行扫描;5、修改指针指向后,还要释放被删节点的内存空间;6、对链表操作完毕后,要return head,返回头指针;单向链表的头指针永远指向链表的第一个元素,不能指向其它的位置; 返回了.原创 2022-03-07 16:42:37 · 267 阅读 · 0 评论 -
ubuntu下编写c++
配置c++环境: 要在 Ubuntu 编写 C++程序,需要两样东西——能编写代码的文本编辑器(vim/nvim)和、C++编译器。在新装的 Ubuntu 环境里,是没有安装编译 C 语言的 GCC 和编译 C++的 G++的,需要自己安装;直接打开ubuntu输入——gcc/g++可分别查看,是否安装有gcc/g++编译器直接打开ubuntu输入——gcc -v或g++ -v,可查看安装好的gcc/g++编译器的版本信息2.编写第一个c++程序在终端创建一个 C++目录,然后 cd..原创 2022-02-23 16:52:35 · 4380 阅读 · 0 评论