![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C++
文章平均质量分 94
连理o
负优化砖家
展开
-
VSCode C++ 环境搭建 (Linux)
参考:Getting Started with C++ in VS Code目录Install extensionsUsing C++ on Linux in VS CodePrerequisitesCreate Hello WorldBuild helloworld.cpp (`tasks.json`)Debug helloworld.cpp (`launch.json`)Make use of `Makefile`C/C++ configurationsUsing C++ on Windows i.原创 2021-01-24 10:29:23 · 462 阅读 · 0 评论 -
C++基础:多文件编程 (extern, 降低文件间的编译依存度)
本文为《C++ Primer》的读书笔记目录多文件编程外部变量声明 `extern`建议最优用法一个 .c 文件需要调用另一个 .c 文件里的变量或者函数,而不能从 .h 文件中调用变量在声明语句中不要给变量赋值引用函数如果不想让其他 .c 文件引用本文件中的变量,加上 `static` 即可多文件编程函数当我们调用一个函数时,编译器只需要掌握函数的声明因此,我们将函数声明放在头文件中,而定义放在源文件中inline 以及 constexpr 函数的定义通常放在头文件中类当我们使原创 2020-11-24 11:56:07 · 1203 阅读 · 0 评论 -
C++基础(一):C++ 源文件、头文件、IO、变量
本文为《C++ Primer》的读书笔记目录后缀输入输出(IO)标准输入输出对象使用标准库中的名字向流写入数据从流读取数据文件重定向后缀源文件.cc, .cxx, .cpp, .cp头文件标准库头文件一般不带后缀输入输出(IO)C++提供了iostream库来提供IO机制iostream库包含两个基础类 istream和ostream,分别表示输入流和输出流。一个流就是一个字符序列,是从IO设备读出或写入IO设备的标准输入输出对象标准库定义了4个IO对象标准输入(standar原创 2020-08-25 16:38:29 · 662 阅读 · 0 评论 -
C++基础(二):类型(类型别名、auto、decltype)、基本内置类型、复合类型、类型转换
本文为《C++ Primer》的读书笔记目录基本内置类型算术类型(arithmetic type)类型转换字面值常量整型字面值浮点型字面值字符串字面值空指针泛化的转义序列指定字面值的类型数组定义和初始化内置数组访问数组元素指针和数组标准库函数 begin 和 endC风格字符串多维数组多维数组的初始化处理多维数组的元素指针和多维数组类型别名简化多维数组的指针基本内置类型内置类型是由C++语言直接定义的。这些类型体现了大多数计算机硬件本身具备的能力算术类型(arithmetic type)wch原创 2020-08-25 16:45:19 · 389 阅读 · 0 评论 -
C++基础(三):constexpr 和 常量表达式
本文为《C++ Primer》的读书笔记目录const 限定符默认状态下, const 对象仅在文件内有效对const的引用(常量引用)指针和const指向常量的指针const 指针constexpr 和常量表达式常量表达式constexpr变量字面值类型(literal type)const 限定符const int ci = 42; int i = ci; //正确: 当拷贝ci 时, 忽略了它的顶层constconst int bufSize = 512; //任何试图为bufSize赋原创 2020-08-25 17:13:23 · 250 阅读 · 0 评论 -
C++基础(四):string、vector、迭代器
本文为《C++ Primer》的读书笔记目录后缀输入输出(IO)标准输入输出对象使用标准库中的名字向流写入数据从流读取数据文件重定向基本内置类型算术类型(arithmetic type)类型转换字面值常量整型字面值浮点型字面值字符串字面值空指针泛化的转义序列指定字面值的类型数组定义和初始化内置数组访问数组元素指针和数组标准库函数 begin 和 endC风格字符串多维数组多维数组的初始化处理多维数组的元素指针和多维数组类型别名简化多维数组的指针变量列表初始化 list initialization默认初始原创 2020-07-30 21:29:33 · 706 阅读 · 0 评论 -
C++基础(五):表达式、语句 (switch、for、goto)
本文为《C++ Primer》的读书笔记目录表达式左值(lvalue)和右值(rvalue)求值顺序算术运算符逻辑和关系运算符赋值运算符递增和递减运算符条件运算符位运算符sizeof 运算符逗号运算符 (comma operator)运算符优先级表语句switch语句传统的for语句范围for语句goto语句try语句块和异常处理标准异常throw表达式try语句块函数在寻找处理代码的过程中退出表达式左值(lvalue)和右值(rvalue)C++的表达式要不然是右值, 要不然就是左值。左值可以位于原创 2020-08-25 18:41:33 · 512 阅读 · 0 评论 -
C++基础(六):调试帮助(assert、NDEBUG、__ func __、__ FILE__、__ LINE__、__ TIME__、__ DATE__)
本文为《C++ Primer》的读书笔记目录调试帮助编译器和预处理器定义的一些有用的静态变量assert 预处理宏(preprocessor marco)NDEBUG预处理变量调试帮助编译器和预处理器定义的一些有用的静态变量__ func __ :编译器为每个函数都定义了__ func __ , 它是const char的一个静态数组, 用于存放函数的名字预处理器还定义了另外4个对程序调试很有用的名字:__ FILE__ 存放文件名的字符串字面值。__ LINE__ 存放当前行号的整原创 2020-08-26 11:47:10 · 331 阅读 · 0 评论 -
C++基础(七):函数
本文为《C++ Primer》的读书笔记目录表达式左值(lvalue)和右值(rvalue)求值顺序算术运算符逻辑和关系运算符赋值运算符递增和递减运算符条件运算符位运算符sizeof 运算符逗号运算符 (comma operator)类型转换整型提升 (integral promotion)强制类型转换(cast)旧式的强制类型转换运算符优先级表语句switch语句传统的for语句范围for语句goto语句try语句块和异常处理标准异常throw表达式try语句块函数在寻找处理代码的过程中退出函数函数的形原创 2020-08-26 14:32:28 · 217 阅读 · 0 评论 -
C++基础(八):类
本文为《C++ Primer》的读书笔记目录定义抽象数据类型设计Sales_data类定义Sales_data类类内初始值引入this引入const 成员函数类作用域和成员函数在类的外部定义成员函数定义一个返回this 对象的函数定义类相关的非成员函数定义read 和print 函数定义add 函数构造函数(constructor)合成的默认构造函数某些类不能依赖合成的默认构造函数定义Sales_data 的构造函数= default的含义构造函数初始值列表在类的外部定义构造函数拷贝、赋值和析构访问控制与原创 2020-09-06 17:05:49 · 470 阅读 · 0 评论 -
C++基础(九):命名空间
本文为《C++ Primer》的读书笔记目录命名空间定义每个命名空间都是一个作用域命名空间可以是不连续的定义命名空间成员模板特例化全局命名空间嵌套的命名空间内联命名空间命名空间(namespace)为防止名字冲突提供了更加可控的机制。命名空间分割了全局命名空间, 其中每个命名空间是一个作用域。通过在某个命名空间中定义库的名字, 库的作者(以及用户)可以避免全局名字固有的限制命名空间定义一个命名空间的定义包含两部分: 首先是关键字namespace, 随后是命名空间的名字。在命名空间名字后面是一系列由原创 2020-11-11 10:22:55 · 272 阅读 · 0 评论 -
C++基础(十):异常处理
本文为《C++ Primer》的读书笔记目录`try`语句块`throw` 表达式`try` 语句块抛出异常栈展开栈展开过程中对象被自动销毁析构函数与异常异常对象捕获异常查找匹配的处理代码重新抛出捕获所有异常 (catch-alI) 的处理代码函数`try`语句块 与 构造函数`noexcept` 异常说明违反异常说明异常说明的实参`noexcept` 运算符异常说明与指针、虚函数和拷贝控制异常类标准异常类自定义异常类try语句块throw 表达式程序的异常检测部分使用throw表达式引发一个异常原创 2020-11-13 14:51:39 · 540 阅读 · 0 评论 -
C++基础(十一):枚举类型、union
本文为《C++ Primer》的读书笔记目录限定 / 不限定 作用域的枚举枚举成员和类一样,枚举也定义新的类型指定`enum` 的大小枚举类型的前置声明形参匹配与枚举类型限定 / 不限定 作用域的枚举C++ 包含两种枚举:限定作用域的 (scoped enumeration)(由 C++11 新标准引入)定义限定作用域的枚举类型的一般形式是:首先是关键字enum class (或者等价地使用enum struct), 随后是枚举类型名字以及用花括号括起来的以逗号分隔的枚举成员列表:/原创 2020-11-13 16:02:07 · 806 阅读 · 0 评论 -
C++基础(十二):lambda 表达式、参数绑定 (用普通函数代替 lambda)
本文为《C++ Primer》的读书笔记目录lambda 表达式lambda 捕获和返回值捕获引用捕获隐式捕获可变 lambda参数绑定标准库 `bind` 函数标准库 `ref` / `cref` 函数lambda 表达式一个 lambda 表达式可以理解为一个未命名的内联函数lambda 必须使用尾置返回 来指定返回类型可以忽略参数列表 (等价于指定一个空参数列表)可以忽略返回类型。如果忽略返回类型,lambda 根据函数体中的代码推断出返回类型如果函数体只是一个return语句,原创 2021-01-23 14:42:48 · 2624 阅读 · 1 评论 -
C++基础(十三):再探迭代器 (插入迭代器、流迭代器、反向迭代器、移动迭代器)
本文为《C++ Primer》的读书笔记目录插入迭代器`iostream` 迭代器`istream_iterator` 操作`ostream_iterator` 操作反向迭代器反向迭代器需要递减运算符反向迭代器和其他迭代器间的关系#include <iterator>插入迭代器 (insert iterator): 这些迭代器被绑定到一个容器上, 可用来向容器插入元素流迭代器 (stream iterator): 这些迭代器被绑定到输入或输出流上,可用来遍历所关联的 IO 流反向迭原创 2021-01-23 15:24:25 · 234 阅读 · 0 评论 -
C++基础(十四):固有的不可移植的特性 (位域、volatile、链接指示)
本文为《C++ Primer》的读书笔记目录位域使用位域`volatile` 限定符链接指示: `extern "C"`声明一个非C++的函数指向 `extern "C"` 函数的指针链接指示对整个声明都有效导出C++函数到其他语言重载函数与链接指示为了支持低层编程,C++定义了一些固有的不可移植的特性。所谓不可移植的特性是指因机器而异的特性, 当我们将含有不可移植特性的程序从一台机器转移到另一台机器上时, 通常需要重新编写该程序。算术类型的大小在不同机器上不一样, 这是我们使用过的不可移植特性的一个原创 2021-01-29 21:41:05 · 306 阅读 · 0 评论 -
C++标准库(一):IO库
本文为《C++ Primer》的读书笔记目录IO类IO 类型间的关系IO 对象无拷贝或赋值条件状态查询流的状态管理条件状态管理输出缓冲刷新输出缓冲区`unitbuf` 操纵符关联输入和输出流文件输入输出使用文件流对象用`fstream` 代替`iostream&`成员函数`open` 和`close`自动构造和析构文件模式以`out`模式打开文件会丢弃已有数据每次调用`open` 时都会确定文件模式`string`流使用`istringstream`使用`ostringstream`IO类为了原创 2020-09-07 22:05:41 · 690 阅读 · 0 评论 -
C++标准库:容器库概览
本文为《C++ Primer》的读书笔记目录对容器可以保存的元素类型的限制容器类型成员获取迭代器容器定义和初始化默认构造函数将一个容器初始化为另一个容器的拷贝列表初始化与顺序容器大小相关的构造函数赋值和`swap`赋值运算符使用`assign` (仅顺序容器)`swap`容器大小操作关系运算符一般来说, 每个容器都定义在一个头文件中, 文件名与类型名相同。即, deque定义在头文件deque中… 容器均定义为模板类,需要额外提供元素类型信息:list<Sales_data>deque&原创 2020-10-29 10:58:53 · 623 阅读 · 0 评论 -
C++标准库(二):顺序容器
本文为《C++ Primer》的读书笔记目录顺序容器概述确定使用哪种顺序容器容器库概览对容器可以保存的元素类型的限制容器操作容器类型成员`begin`和`end`成员容器定义和初始化将一个容器初始化为另一个容器的拷贝列表初始化与顺序容器大小相关的构造函数标准库`array` 具有固定大小容器就是一些特定类型对象的集合。顺序容器(sequential container)为程序员提供了控制元素存储和访问顺序的能力。这种顺序不依赖于元素的值, 而是与元素加入容器时的位置相对应标准库还提供了三种容器适配器,原创 2020-09-11 21:21:27 · 252 阅读 · 1 评论 -
C++标准库:可调用对象与 function
本文为《C++ Primer》的读书笔记目录可调用对象与调用形式不同类型可能具有相同的调用形式标准库 `function` 模板类重载函数 与 `function`可调用对象与调用形式C++ 中有几种可调用的对象: 函数、函数指针、lambda 表达式、bind 创建的对象以及重载了函数调用运算符的类和其他对象一样, 可调用的对象也有类型。例如, 每个 lambda 有它自己唯一的(未命名)类类型; 函数及函数指针的类型则由其返回值类型和实参类型决定, 等等不同类型可能具有相同的调用形式然原创 2021-02-14 07:35:42 · 154 阅读 · 0 评论 -
C++标准库(三):泛型算法、标准库定义的函数对象
本文为《C++ Primer》的读书笔记目录概述迭代器令算法不依赖于容器,但算法依赖于元素类型的操作初识泛型算法只读算法写容器元素的算法算法不检查写操作`back_inserter`拷贝算法重排容器元素的算法消除重复单词定制操作向算法传递函数谓词`stable_sort`lambda 表达式介绍lambda向lambda 传递参数使用捕获列表lambda 捕获和返回值捕获引用捕获隐式捕获可变lambda指定lambda 返回类型参数绑定标准库`bind`函数使用`placeholders` 名字`bind原创 2020-09-14 15:22:10 · 511 阅读 · 0 评论 -
C++标准库(五):动态内存
本文为《C++ Primer》的读书笔记目录动态内存与智能指针`shared_ptr`类`make_shared`函数`shared_ptr` 的拷贝和赋值`shared_ptr` 自动销毁所管理的对象…………`shared_ptr` 还会自动释放相关联的内存使用了动态生存期的资源的类定义`StrBlob` 类`StrBlob` 构造函数元素访问成员函数直接管理内存使用`new`动态分配和初始化对象动态分配的`const` 对象内存耗尽我们的程序到目前为止只使用过静态内存或栈内存静态内存用来保存局部原创 2020-09-20 15:24:58 · 254 阅读 · 0 评论 -
C++标准库(四):关联容器
本文为《C++ Primer》的读书笔记目录使用关联容器使用`map`使用`set`关联容器概述定义关联容器初始化`multimap` 或`multiset`关键字类型的要求有序容器的关键字类型使用关键字类型的比较函数`pair`类型创建`pair` 对象的函数关联容器操作关联容器迭代器`set` 的迭代器是`const` 的遍历关联容器关联容器和算法添加元素向`map`添加元素检测`insert`的返回值向`multiset` 或`multimap` 添加元素删除元素`map`的下标操作访问元素对`ma原创 2020-09-16 15:34:23 · 277 阅读 · 0 评论 -
C++标准库(六):使用标准库:文本查询程序
本文为《C++ Primer》的读书笔记目录文本查询程序设计数据结构在类之间共享数据使用`TextQuery` 类文本查询程序类的定义`TextQuery` 构造函数`QueryResult`类`query` 函数打印结果我们将实现一个简单的文本查询程序。功能很简单,但是实现的思路值得学习我们的程序允许用户在一个给定文件中查询单词。查询结果是单词在文件中出现的次数及其所在行的列表。如果一个单词在一行中出现多次, 此行只列出一次。行会按照升序输出例如, 在某段文本中寻找单词element。输出结果的前原创 2020-09-20 20:48:58 · 492 阅读 · 0 评论 -
C++标准库(七):tuple 类型
本文为《C++ Primer》的读书笔记目录定义和初始化`tuple`访问`tuple`的成员查看`tuple`成员的数量和类型关系和相等运算符使用`tuple`返回多个值#include <tuple>tuple是类似pair的模板。不同tuple类型的成员类型可以不相同,tuple可以有任意数量的成员每个确定的tuple类型的成员数目是固定的定义和初始化tuple注意:第二个为每个成员提供初始值的初始化方式,由于对应的构造函数是explicit的,因此只能使用直接初始化原创 2020-10-25 10:25:33 · 700 阅读 · 0 评论 -
C++标准库(八):bitset 类型
本文为《C++ Primer》的读书笔记目录定义和初始化`bitset`默认初始化使用`unsigned long long` 初始化从一个`string` / 字符数组 初始化`bitset``bitset`操作#include <bitset>标准库定义了bitset类, 使得位运算的使用更为容易, 并且能够处理超过最长整型类型大小的位集合定义和初始化bitset可以通过位置来访问bitset中的二进制位。例如,bitvec包含编号从0到31的32个二进制位。编号从0开始的二进原创 2020-10-25 12:55:39 · 2063 阅读 · 3 评论 -
C++标准库(九):正则表达式
本文为《C++ Primer》的读书笔记目录正则表达式库`regex`ECMAScript`regex_match`, `regex_search `使用正则表达式库正则表达式库#include <regex> // regular expressionregexregex 类表示一个正则表达式默认情况下,regex 使用的正则表达式语言是 ECMAScriptECMAScript[[::alpha:]] 匹配任意字母+ 为正闭包,代表一个或多个匹配* 为闭包,原创 2021-01-17 13:55:36 · 1558 阅读 · 0 评论 -
C++标准库(十):随机数
目录随机数引擎和分布程序通常需要一个随机数源。在新标准出现之前,C 和 C++ 都依赖于一个简单的 C 库 函数 rand 来生成随机数。此函数生成均匀分布的伪随机整数, 每个随机数的范围在 0 和一个系统相关的最大值(至少为 32767) 之间rand 函数有一些问题: 很多程序需要不同范围的随机数。一些应用需要随机浮点数。一些程序需要非均匀分布的数。而程序员为了解决这些问题而试图转换 rand 生成的随机数的范围、类型或分布时, 常常会引入非随机性定义在头文件 random 中的随机数库通过一组原创 2021-01-17 23:38:10 · 909 阅读 · 0 评论 -
类设计者的工具(一):拷贝控制
本文为《C++ Primer》的读书笔记目录拷贝、赋值与销毁拷贝构造函数合成拷贝构造函数拷贝初始化拷贝初始化的限制编译器可以绕过拷贝构造函数拷贝赋值运算符重载赋值运算符合成拷贝赋值运算符析构函数析构函数完成什么工作什么时候会调用析构函数合成析构函数三/五法则需要析构函数的类也需要拷贝和赋值操作需要拷贝操作的类也需要赋值操作, 反之亦然使用`=default`阻止拷贝或赋值定义删除的函数析构函数不能是删除的成员合成的拷贝控制成员可能是删除的当定义一个类时, 我们显式地或隐式地指定在此类型的对象拷贝、移动、原创 2020-09-28 15:41:27 · 305 阅读 · 3 评论 -
类设计者的工具(二):拷贝控制示例
本文为《C++ Primer》的读书笔记目录设计思路`Message`类设计思路作为类需要拷贝控制的例子, 我们将概述两个类的设计, 这两个类可能用于邮件处理应用中两个类命名为Message 和Folder, 分别表示电子邮件消息和消息目录。每个Message对象可以出现在多个Folder中。但是,任意给定的Message的内容只有一个副本为了记录Message位于哪些Folder 中, 每个Message 都会保存一个它所在Folder 的指针的set, 同样的, 每个Folder都保存一个它包原创 2020-09-23 15:26:46 · 109 阅读 · 0 评论 -
类设计者的工具(三):重载运算与类型转换
本文为《C++ Primer》的读书笔记目录基本概念直接调用一个重载的运算符函数某些运算符不应该被重载赋值和复合赋值运算符选择作为成员或者非成员基本概念重载的运算符是具有特殊名字的函数: 它们的名字由关键字operator 和其后要定义的运算符号共同组成。除了重载的函数调用运算符operator()之外,其他重载运算符不能含有默认实参如果一个运算符函数是成员函数,则它的第一个(左侧)运算对象绑定到隐式的this指针上一个运算符函数或者是类的成员, 或者至少含有一个类类型的参数。这一约定意味着当原创 2020-10-04 14:45:19 · 204 阅读 · 0 评论 -
类设计者的工具(四):面向对象程序设计 (继承)
本文为《C++ Primer》的读书笔记目录OOP: 概述继承动态绑定定义基类和派生类定义基类成员函数与继承访问控制与继承定义派生类派生类中的虚函数派生类向基类的类型转换派生类构造函数派生类使用基类的成员继承与静态成员派生类的声明被用作基类的类防止继承的发生类型转换与继承静态类型与动态类型不存在从基类向派生类的隐式类型转换…………在对象之间不存在类型转换虚函数对虚函数的调用可能在运行时才被解析派生类中的虚函数`final` 和 `override` 说明符虚函数与默认实参回避虚函数的机制抽象基类纯虚函数含原创 2020-10-12 18:59:10 · 459 阅读 · 0 评论 -
类设计者的工具(五):面向对象程序设计示例
本文为《C++ Primer》的读书笔记目录文本查询程序再探面向对象的解决方案抽象基类将层次关系隐藏于接口类中`Query_base`类和`Query`类文本查询程序再探接下来, 我们扩展之前的文本查询程序,用它作为说明继承的最后一个例子。在上一版的程序中, 我们可以查询在文件中某个指定单词的出现情况。我们将在本节扩展该程序使其支持更多更复杂的查询操作。在后面的例子中, 我们将针对下面这个小故事展开查询:Alice Emma has long flowing red hair.Her Daddy原创 2020-10-15 11:58:15 · 669 阅读 · 0 评论 -
类设计者的工具(六):模板与泛型编程
本文为《C++ Primer》的读书笔记目录原创 2020-10-24 17:25:23 · 268 阅读 · 0 评论 -
C++ 资源管理
本文参考 C++ PrimerC++\ PrimerC++ Primer, Effective C++Effective\ C++Effective C++目录资源管理以对象管理资源行为像值的类行为像指针的类引用计数定义一个使用引用计数的类智能指针 和 资源管理智能指针 和 异常智能指针 和 哑类实例:动态内存管理类`StrBlob` 类核查指针类`StrVec` 类`StrVec` 类的设计`StrVec` 类定义资源管理所谓资源就是,一旦用了它,将来必须还原创 2021-02-04 10:43:06 · 207 阅读 · 0 评论