C++学习笔记
文章平均质量分 53
LaterEqualsNever~~
当不成咸鱼怎么办~~
展开
-
solid设计原则
设计模式的六大原则Single Responsibility Principle:单一职责原则 Open Closed Principle:开闭原则 Liskov Substitution Principle:里氏替换原则 Law of Demeter:迪米特法则 Interface Segregation Principle:接口隔离原则 Dependence Inversion Principle:依赖倒置原则单一职责原则 就一个类而言,应该仅有一个引起它变化的原因。应...原创 2021-11-28 20:38:51 · 214 阅读 · 0 评论 -
Gcc相关
1. 告警选项-Wall 会打开一些很有用的告警,建议编译时加此项 -W/-Wextra 打印一些额外的告警 -w 禁止显示所有告警 -Werror 把警告当作错误,出现任何告警就放弃编译 -Wunreachable-code 如果编译器探测到永远不会执行到的代码,就给出警告 -Wredundant-decls 如果在同一个可见域内某定义声明多次,编译器发出警告,即使这些重复声明有效并且毫无差别...原创 2021-11-22 01:04:57 · 165 阅读 · 0 评论 -
GDB相关
1. gdb调试程序,运行控制命令running a .set args【args1,....】 可以改变被调试程序运行时的参数 b. start命令开始|重新开始调试程序,并停止在main函数入口 c. run命令开始|重新开始调试程序,执行到第一个断点停止。 d. show args 可以显示被调试程序运行时的参数...原创 2021-11-21 01:56:16 · 85 阅读 · 0 评论 -
力扣 22括号生成 题解
力扣https://leetcode-cn.com/problems/generate-parentheses/题目描述数字n代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且有效的括号组合。有效括号组合需满足:左括号必须以正确的顺序闭合。分析 有效括号的点: 左括号必须以正确的顺序闭合 那么在生成括号序列的过程中 1. 当左括号的数据小于n 可放置左括号 2. 回溯...原创 2021-10-31 23:36:27 · 145 阅读 · 0 评论 -
力扣746题编码
力扣746题 力扣https://leetcode-cn.com/problems/min-cost-climbing-stairs/题目描述数组的每个下标作为一个阶梯,第 i 个阶梯对应着一个非负数的体力花费值cost[i](下标从 0 开始)。每当你爬上一个阶梯你都要花费对应的体力值,一旦支付了相应的体力值,你就可以选择向上爬一个阶梯或者爬两个阶梯。请你找出达到楼层顶部的最低花费。在开始时,你可以选择从下标为 0 或 1 的元素作为初始阶梯。输入:cost = [10, 15, 20...原创 2021-10-29 01:00:18 · 99 阅读 · 0 评论 -
constexpr 和 const的区别
constexpr的使用方式:CC++11 constexpr:验证是否为常量表达式(长篇神文)constexpr 是 C++ 11 标准新引入的关键字,不过在讲解其具体用法和功能之前,读者需要先搞清楚 C++ 常量表达式的含义。 所谓常量表达式,指的就是由多个(1)常量组成的表达式。换句话http://c.biancheng.net/view/7781.htmlconstexpr 是 C++ 11 标准新引入的关键字,不过在讲解其具体用法和功能之前,读者需要先搞清楚 C++ 常量表达式的含义。 所谓.原创 2021-10-17 20:49:47 · 313 阅读 · 0 评论 -
C++ 强制类型转换
接上篇:CSDNhttps://mp.csdn.net/mp_blog/creation/editor/120592749dynamic_cast用法: dynamic_cast<Type *>(pt)说明:如果指向的对象(*pt)的类型为Type或者是从Type直接或者间接派生而来的类型,则将指针pt转换为Type类型的指针. 1.dynamic_cast是运行阶段类型识别组件,也就是说,它作用于运行时. 2.dynamic_cast判断指针类型pt是否...原创 2021-10-16 22:04:20 · 255 阅读 · 0 评论 -
类基础随笔
类和结构体结构体的默认访问类型是public,类的默认访问类型是private通常使用类来实现类描述,结构限制为了存粹的表示数据类型内联方法1. 定义位于类声明的函数都将自动成为内联函数class Stock{private: void set_tot() {……};}2. 在类之外定义成员函数,使用inline使其成为内联函数class Stock{pri...原创 2021-10-10 21:08:54 · 81 阅读 · 0 评论 -
动态分配New运算符
1. 使用new 运算符初始化 初始化方式int main(){ int *a = new int(6); int *arr = new int[4] {1,2,3,4}; //C++11 int *b = new int{6}; //C++11 return 0;}2. 定位new运算符 普通new 运算符负责在堆中找到合适的内存块,定位new运算符是在指定的位置找到合适的内存。通常用于设置内存管理规程,处理需要通过特定地...原创 2021-10-07 21:59:38 · 245 阅读 · 0 评论 -
Clion多文件编译
先创建一个子目录TestStruct,在该目录下,生成一个.h 和两个.cpp文件链接编译,结构如下:1. 创建出TestStruct目录2. 在该目录下创建TestStruct.h和TestStruct.cpp,TestStruct1.cpp文件 TestStruct.h#ifndef LEARN01_TESTSTRUCT_H#define LEARN01_TESTSTRUCT_Hstruct Polar { int a; int b;};in...原创 2021-10-06 17:12:00 · 1924 阅读 · 1 评论 -
引用变量基础
目录一、定义二、使用步骤1.创建引用变量2.引用返回3.引用参数总结一、定义引用是已定义变量的别名,主要用途是用作函数的形参,通过将引用变量用作参数,函数将使用原始数据,而不是其副本。为函数处理大型结构提供了另一种方便的捷径(还有指针)。二、使用步骤1.创建引用变量 如下代码,使用&符号用来声明引用,int &ap = a 代表 ap和 a 指向同样的值和内存单元,aP只是a的一个别名。int main()...原创 2021-10-06 15:59:19 · 194 阅读 · 0 评论 -
C++内联函数
内联函数时C++为了提高程序运行的一项改进,内联函数通过避免被调用的开销来提高执行效率,尤其是它能够通过调用(“过程化集成”)被编译器优化。编译器会将对应的函数代码替换为函数调用,对于内联代码,程序不需要跳转到另外一个位置执行,再跳回来,所以内联函数运行速度比普通函数稍快,但是会占用更多的内存,因为调用内联函数的地方越多,对应的函数副本就更多。使用:函数定义不能过长,函数过大编译器不会将其定义为内联函数 函数声明前加上关键字inline 函数定义前加上关键字inline 函数...原创 2021-10-05 17:28:23 · 78 阅读 · 0 评论 -
简单文本输入输出
1. 使用文件输出包含头文件fstream。 创建ofstream对象。 关联ofstream对象和某个文件。 像使用cout那样使用ofstream对象。int writeFile(){ ofstream outFile; outFile.open("test.txt"); // 检查文件是否正确打开 if(!outFile.is_open()){ cout<<"failed to open file\n"; }原创 2021-10-04 20:56:57 · 225 阅读 · 0 评论 -
cctype函数库
转载:【C++】学习笔记二十三——字符函数库cctype_buaadf的博客-CSDN博客转载 2021-10-04 19:46:07 · 58 阅读 · 0 评论 -
创建类型别名的方法
创建别名的两种方式:1. 使用预处理器 #define 比如#define BYTE N_BYTE ,预处理器在编译程序时,会用N_BYTE替换所有的BYTE,从而使N_BYTE成为BYTE的别名。 注意:在处理复杂类型别名时,#define 不使用,比如: #define INT_PTR int* INT_PTR a, b; 预处理器使用时就会直接替换INT_PTR,变成int * a, b。这显然和我们预期的结...原创 2021-10-04 19:25:54 · 450 阅读 · 0 评论 -
递增运算符和递减运算符
1. i++和 ++i的区别 i++和++i对于i的结果来说其实没区别,不同点就是i++是使用i计算当前表达式,然后再将i加1,而++i是先将i加1然后使用新的值来计算表达式。int main(){ int j = 5; int res = j++; cout<<j<<endl; //6 cout<<res<<endl; // 5 赋值后再计算 int i = 5; int res1 = +...原创 2021-10-04 19:13:24 · 369 阅读 · 0 评论 -
C++指针基础
1. 声明和初始化指针 指针储存的是地址。 比如:int * testPointer; 这里testPointer 为int*类型的值,存储内存地址。 *testPointer为int类型的值,代表当前内存地址存储的值。int main{ int testPointer = 5; int *p = &testPointer; cout<<p<<endl; //内存地址 0x...原创 2021-10-03 11:56:30 · 78 阅读 · 0 评论 -
C++ 枚举
关于枚举的定义声明等参考 C语言详解 - 枚举类型 - jcsu - 博客园这里说明一下枚举的取值范围 对于枚举来说,只有声明中指出的那些值是有效的,然而,C++通过强制类型转换,增加了可赋值给枚举的合法值。 enum Test{a = 1, b = 2, c= 5}; Test test; test = Test (4) 是合法的.enum TestEnum{ a = 1, b = 2, ...原创 2021-10-01 15:35:50 · 191 阅读 · 0 评论 -
C++字符串
1. 字符串是存储在内存的连续字节的一系列字符。 c风格字符串:以空字符‘\0’结尾 int main() { char arr[2] = {'a','b'}; //非字符串 char arr1[2] = {'a','\0'}; //字符串 cout<<arr1<<endl; cout<<arr<<endl;} 程序运行结果如图所示,由于arr1以‘\0’结尾,所以cout在打印...原创 2021-10-01 13:37:22 · 514 阅读 · 0 评论 -
C++数组
1. 定义 数组,一种能够存储多个相同类型的值的数据格式。 声明: typeName arrayName[arraySize] 需要注意的是,这种方式声明的时候,arraySize不能是变量。 数组声明会创建大量的变量,可以用索引来访问每个元素。数组索引从0开始,访问的时候要注意下标越界的问题。int main(){ int arr [12] = {1, 2, 3}; cout<<arr[0]...原创 2021-09-29 20:22:39 · 220 阅读 · 0 评论 -
C++类型转换
1. 自动类型转换场景赋值: double a = 3; 表达式包含不同类型 3+3.6 参数传递给函数 还存在强制类型转换2. 数值转换的潜在问题 将较大浮点数转为较小浮点数 double -> float 值可能会超出目标类型的取值范围,精度降低,结果不确定 浮点型转整数 ,小数部分会丢失值可能会超出目标类型的取值范围,精度降低,结果不确定 较大整数转为较小整数 ,值可能会超出目标类型的取值范围 通常只复制右边的字int main() { ...原创 2021-09-28 23:54:48 · 456 阅读 · 0 评论 -
NULL , 0, nullptr
1. 存在返回值的函数 x = sqrt(6.25) 注意: C++程序应当为程序中使用的每个函数提供原型,类似变量声明。原创 2021-09-27 21:34:41 · 70 阅读 · 0 评论