
C++
文章平均质量分 90
鱼竿钓鱼干
万丈高楼平地起,勿在浮沙筑高台
展开
-
浅谈 CRTP:奇异递归模板模式
浅谈 CRTP:奇异递归模板模式原创 2022-10-30 21:18:42 · 4866 阅读 · 1 评论 -
[C++ Weekly] EP2 Cost of Using Statics
C++ 11 为了确保 static 初始化线程安全,存在一定开销statics。原创 2022-10-08 10:25:03 · 603 阅读 · 0 评论 -
《C++ 并发编程实战 第二版》:条件变量唤醒丢失与虚假唤醒
本文主要是对《C++ 并发编程实战 第二版》第 4 章中条件变量部分做进一步探究,主要内容为使用条件变量时可能会碰到的两个坑:唤醒丢失与虚假唤醒原创 2022-08-20 22:11:14 · 3095 阅读 · 0 评论 -
《C++ 并发编程实战 第二版》前 4 章 标准库工具及其使用:思维导图
《C++ 并发编程实战 第二版》学习笔记目录下面是 markdown 版本,思维导图只是对书中内容主题的粗略概括,部分知识点的详细研究请关注学习笔记目录当中的相关文章原创 2022-08-13 10:39:29 · 869 阅读 · 0 评论 -
c++ map索引不存在的key可能导致的后果
今天调这个调了很久才发现这个问题,所以记录以下测试代码#include<bits/stdc++.h>using namespace std;int main(){ map<int,int>mp_int; map<string,string>mp_string; map<char,char>mp_char; mp_int[1]=10; string a="abc",b="xzy",c="def"; mp_string[a]=b; mp_原创 2020-12-13 01:00:18 · 6968 阅读 · 2 评论 -
[侯捷 C++内存管理] 标准分配器实现
[侯捷 C++内存管理] 标准分配器实现文章目录[侯捷 C++内存管理] 标准分配器实现VC6 标准分配器之实现VC6 malloc()VC6 allocatorBC5 标准库分配器之实现G2.9 分配器的实现而今安在哉G4.9 标准库分配器之实现G4.9 pool allocator 用例G2.9 std::alloc 运行模式embedded pointersG2.9 std::alloc 运行一瞥一帆风顺遭遇苦难山穷水尽柳暗花明?蓦然回首G2.9 std::alloc 源码剖析G2.9 std::a原创 2022-03-10 19:49:18 · 1674 阅读 · 0 评论 -
C++ Primer 0x10 学习笔记
???? C++ Primer 0x10 学习笔记更好的阅读体验(实时更新与修正)推荐阅读 《C++ Primer 5th》知识点总结&练习题解16.1 定义模板16.1.1 函数模板模板定义以关键字template开始,后跟一个模板参数列表(逗号分隔,不能为空)使用模板时需要指定模板实参,将其绑定到模板参数上模板类型参数模板类型参数前面加typename或class关键字,一般使用typename非类型模板参数模板非类型参数表示一个值而非类型,我们通过一个特定的类型名原创 2022-01-27 00:45:29 · 352 阅读 · 0 评论 -
C++ Primer 0x0E 学习笔记
???? C++ Primer 0x0E 学习笔记更好的阅读体验(实时更新与修正)推荐阅读 《C++ Primer 5th》知识点总结&练习题解14.1 基本概念重载的运算符是具有特殊名字的函数:它们的名字由关键字operator和其后要定义的运算符号共同组成,和其他函数一样有返回类型、参数列表以及函数体当一个重载的运算符是成员函数时,this绑定到左侧运算对象,成员函数的显式参数数量比运算对象的数量少一个对于一个运算符号来说,它或者是类的成员,或者至少包含一个类类型的参数,原创 2022-01-27 00:44:34 · 170 阅读 · 0 评论 -
C++ Primer 0x0F 学习笔记
???? C++ Primer 0x0F 学习笔记更好的阅读体验(实时更新与修正)推荐阅读 《C++ Primer 5th》知识点总结&练习题解15.1 OOP:概述面向对象程序设计的核心思想是数据抽象、继承和动态绑定使用数据抽象,我们可以将类的接口与实现分离使用继承,可以定义相似的类型并对其相似关系建模使用动态绑定,可以一定程度上忽略相似类型的区别,统一的方式使用他们的对象继承通过继承联系在一起的类构成一种层次关系,根部的为基类,其他类别直接或间接继承基类称为派生类原创 2022-01-27 00:34:46 · 297 阅读 · 0 评论 -
C++ Primer 0x0E 学习笔记
???? C++ Primer 0x0E 学习笔记更好的阅读体验(实时更新与修正)推荐阅读 《C++ Primer 5th》知识点总结&练习题解14.1 基本概念重载的运算符是具有特殊名字的函数:它们的名字由关键字operator和其后要定义的运算符号共同组成,和其他函数一样有返回类型、参数列表以及函数体当一个重载的运算符是成员函数时,this绑定到左侧运算对象,成员函数的显式参数数量比运算对象的数量少一个对于一个运算符号来说,它或者是类的成员,或者至少包含一个类类型的参数,原创 2022-01-27 00:33:41 · 712 阅读 · 0 评论 -
C++ Primer 0x0D 学习笔记
???? C++ Primer 0x0D 学习笔记更好的阅读体验(实时更新与修正)推荐阅读 《C++ Primer 5th》知识点总结&练习题解13.1 拷贝、赋值与销毁当定义一个类时,我们显式或隐式地指定在此类型的对象拷贝、移动、赋值和销毁时做什么类通过定义物种特殊的成员函数来控制这些操作(即,拷贝控制操作)拷贝构造函数:定义了用同类型的另一个对象初始化本对象时做什么拷贝赋值运算符:定义了将一个对象赋予同类型对象时做什么移动构造函数:定义了用同类型的另一个对象初始化本对象时做什原创 2022-01-27 00:32:39 · 710 阅读 · 1 评论 -
C++ Primer 0x0D 练习题解
???? C++ Primer 0x0D 练习题解更好的阅读体验(实时更新与修正)推荐阅读 《C++ Primer 5th》知识点总结&练习题解13.1 拷贝、赋值与销毁13.1.1 拷贝构造函数13.1 拷贝构造函数是什么?什么时候使用它?如果一个构造函数的第一个参数是自身类类型的引用(且一般是一个const的引用),且任何额外参数都有默认值,则此构造函数是拷贝构造函数当拷贝初始化的时候会使用拷贝构造函数拷贝初始化不仅在我们用=定义变量时发生,在下列情况也会发生将一个对象作原创 2022-01-27 00:31:52 · 1214 阅读 · 0 评论 -
C++ Primer 0x0B 学习笔记
???? C++ Primer 0x0B 学习笔记更好的阅读体验(实时更新与修正)推荐阅读 《C++ Primer 5th》知识点总结&练习题解关联容器支持高效的关键字查找和访问,map和set是两个主要的关联容器标准库提供8个关联容器按关键字有序保存元素map:关联数组,保存关键字-值对set:关键字即值,即值保存关键字的容器,底层实现是红黑树multimap:关键字可重复出现的mapmultiset :关键字可重复出现的set无序集合unordere原创 2022-01-18 17:01:00 · 508 阅读 · 0 评论 -
C++ Primer 0x0B 练习题解
???? C++ Primer 0x0B 练习题解更好的阅读体验(实时更新与修正)推荐阅读 《C++ Primer 5th》知识点总结&练习题解11.1 使用关联容器11.1 描述map和vector的不同map是关联容器,vector是顺序容器关联容器不支持顺序容器的位置相关的操作如push_front或push_back关联容器的迭代器都是双向的,vector是随机迭代器11.2 分别给出最适合使用list、vector、deque、map以及set的例子。lis原创 2022-01-18 17:00:05 · 473 阅读 · 0 评论 -
C++ Primer 0x0C 练习题解
???? C++ Prime 0x0C 练习题解更好的阅读体验(实时更新与修正)推荐阅读 《C++ Primer 5th》知识点总结&练习题解12.1 动态内存与智能指针12.1.1 shared_ptr 类12.1 在此代码的结尾,b1 和 b2 各包含多少个元素?StrBlob b1;{ StrBlob b2 = {"a", "an", "the"}; b1 = b2;//b1,b2共享相同的元素 b2.push_back("about");//b1,b2都有4个元素}/原创 2022-01-14 20:55:40 · 428 阅读 · 0 评论 -
C++ Primer 0x0C 学习笔记
???? C++ Prime 0x0C 学习笔记更好的阅读体验(实时更新与修正)推荐阅读 《C++ Primer 5th》知识点总结&练习题解12.1 动态内存与智能指针运算符new,在动态内存中为对象分配空间并返回一个指向该对象的指针,我们可以选择对对象初始化运算符delete,接受一个动态对象的指针,销毁该对象,并释放与之关联的内存智能指针负责自动释放所指向的对象,定义在memory头文件中shared_ptr允许多个指针指向同一个对象unique_ptr独占所指向的对象w原创 2022-01-14 20:54:35 · 354 阅读 · 0 评论 -
C++ Primer 0x0A 学习笔记
???? C++ Prime 0x0A 学习笔记更好的阅读体验推荐阅读 《C++ Primer 5th》知识点总结&练习题解10.1 概述迭代器令算法不依赖于容器,但算法依赖于元素类型的操作泛型算法本身不会执行容器的操作,它们只会运行于迭代器之上,执行迭代器的操作算法永远不会改变底层容器的大小,可能改变保存元素的值或位置,但永远不会直接添加或删除元素大部分在头文件algorithm,部分在numeric10.2 初识泛型算法10.2.1 只读算法accumulate求和算法原创 2022-01-10 16:42:18 · 322 阅读 · 0 评论 -
C++ Primer 0x0A 练习题解
???? C++ Prime 0x0A 练习题解更好的阅读体验推荐阅读 《C++ Primer 5th》知识点总结&练习题解10.1 概述10.1 头文件algorithm中定义了一个名为count的函数,它类似find, 接受一对迭代器和一个值作为参数。count返回给定值在序列中出现的次数。编写程序,读取int序列存入vector中,打印有多少个元素的值等于给定值。#include <iostream>#include <algorithm>#inclu原创 2022-01-10 16:41:36 · 612 阅读 · 0 评论 -
C++ Primer 0x09 学习笔记
???? C++ Primer 0x09 学习笔记更好的阅读体验推荐阅读 《C++ Primer 5th》知识点总结&练习题解9.1 顺序容器概述所有顺序容器都提供了快速访问元素的能力,但是这些容器在以下方面都有不同的性能折中向容器添加或从容器中删除元素的代价非顺序访问容器中元素的代价除了固定大小的array外,其他容器都提供高效、灵活的内存管理新标准库的容器比旧版本快很多,所以我们应该尽量使用标准库容器而不是原始的数据结构,如内置数组通常vector是最好的选择,原创 2022-01-10 16:41:01 · 418 阅读 · 0 评论 -
C++ Primer 0x09 练习题解
???? C++ Primer 0x09 练习题解更好的阅读体验推荐阅读 《C++ Primer 5th》知识点总结&练习题解9.1 顺序容器概述9.1 对于下面的程序任务,vector、deque和list哪种容器最为适合?解释你的选择的理由。如果没有哪一种容器优于其他容器,也请解释理由。(a) 读取固定数量的单词,将它们按字典序插入到容器中。我们将在下一章中看到,关联容器更适合这个问题。(b) 读取未知数量的单词,总是将单词插入到末尾。删除操作在头部进行。© 从一个文件读取未知数原创 2022-01-10 16:40:15 · 434 阅读 · 0 评论 -
C++ Primer 0x08 练习题解
???? C++ Primer 0x08 练习题解更好的阅读体验推荐阅读 《C++ Primer 5th》知识点总结&练习题解8.1 IO类8.1.2 条件状态8.1 编写函数,接受一个istream&参数,返回值类型也是istream&。此函数须从给定流中读取数据,直至遇到文件结束标识时停止。它将读取的数据打印在标准输出上。完成这些操作后,在返回流之前,对流进行复位,使其处于有效状态。8.2 测试函数,调用参数为cin。#include <iostream&原创 2022-01-08 13:18:20 · 390 阅读 · 0 评论 -
C++ Primer 0x08 学习笔记
???? C++ Primer 0x08 学习笔记更好的阅读体验8.1 IO 类标准库通过继承机制,使我们能忽略不同类型的流之间的差异继承机制使我们可以声明一个特定的类继承自另一个类,我们通常可以将一个派生类(继承类)对象当作其基类(所继承的类)对象来使用8.1.1 IO 对象无拷贝或赋值我们不能拷贝或对 IO 对象赋值不能将形参或返回类型设为刘类型进行 IO 操作的函数通常以引用方式传递和返回流,因为读写一个 IO 对象会改变状态,因此传递和返回的引用不能是 const的8.1.原创 2022-01-08 13:16:57 · 421 阅读 · 0 评论 -
C++ Primer 0x07 练习题解
???? C++ Primer 0x07 练习题解更好的阅读体验7.1 定义抽象数据类型7.1.1 定义抽象数据类型7.1 使用2.6.1节定义的Sales_data类为 1.6节 的交易处理程序编写一个新版本。#include <iostream>#include <string>struct Sales_data { std::string bookNo; unsigned units_sold = 0; double revenue = 0.0;}原创 2022-01-08 13:16:18 · 452 阅读 · 0 评论 -
C++ Primer 0x07 学习笔记
???? C++ Primer 0x07 学习笔记更好的阅读体验7.1 定义抽象数据类型类的基本思想是数据抽象和封装数据抽象是一种依赖于接口和实现分离的编程技术类的接口包括用户所能执行的操作类的实现包括类的数据成员、负责接口实现的函数体以及定义类所需的各种私有函数封装实现了类的接口和实现的分离,隐藏了实现细节,类的用户只能使用接口而无法访问实现部分类要实现数据抽象和封装,首先定义一个抽象数据类型,由类的设计者负责考虑类的实现过程,使用类的程序员只要抽象地思考类型做了什么,而无需了解类型的工原创 2022-01-08 13:15:36 · 398 阅读 · 0 评论 -
C++ Primer 0x04 学习笔记
???? C++ Primer 0x04 学习笔记更好的阅读体验(实时更新和修正)4.1 基础4.1.1 基本概念C++ 定义了一元运算符、二元运算符以及一个三元运算符,看作用于几个对象。函数调用也是特殊的运算符,它对运算对象数量没有限制。一个符号是几元运算符要看上下文理解表达式前要知道运算符优先级、结合律,运算对象求值顺序运算过程中常常发生类型转换自定义事实上已存在的运算符赋予另外含义的操作称为重载运算符使用重载运算符的时候,运算对象的类型和返回值类型都由运算符定义,但是运算对象的个数、原创 2022-01-05 10:30:03 · 97 阅读 · 0 评论 -
C++ Primer 0x06 练习题解
???? C++ Primer 0x06 练习题解更好的阅读体验(实时更新和修正)6.1 函数基础6.1 实参和形参的区别的什么?实参是形参的初始值,用来定义和初始化形参实参是函数调用时的实际值6.2 请指出下列函数哪个有错误,为什么?应该如何修改这些错误呢?(a) int f() { string s; // ... return s;//返回值为int }(b) f2(int i) { /* ... */ }//没定义返原创 2022-01-05 10:30:16 · 369 阅读 · 0 评论 -
C++ Primer 0x06 学习笔记
???? C++ Primer 0x06 学习笔记更好的阅读体验(实时更新和修正)6.1 函数基础一个典型的函数定义包括以下部分:返回类型函数名字由0个或多个形参组成的列表函数体函数调用完成两项工作:隐式得用实参初始化形参;将控制权交给被调用函数,主函数的执行暂时中断实参是形参的初始值,尽管实参和形参存在对应关系,但没有规定实参的求值顺序形参名可选,但一般都要有。是否设置未命名的形参并不影响调用时提供的实参数量,即使某个形参不被函数使用,也必须提供一个实参6.1.1 局部对象原创 2022-01-04 16:27:09 · 315 阅读 · 0 评论 -
C++ Primer 0x05 学习笔记
???? C++ Primer 0x05 学习笔记更好的阅读体验(实时更新和修正)5.1 简单语句使用空语句时应该加上注释,从而令读这段代码的人知道该语句是有意省略的别漏写分号,也别多写分号多余的空语句并非总是无害的复合语句是指用花括号括起来的语句和声明序列,也称为块,一个块就是一个作用域块不以分号作为结束空块作用等于空语句5.2 语句的作用域定义在控制结构当中的变量只在相应的语句的内部可见,一旦语句结束,变量也就超出其作用范围了5.3 条件语句为了清晰的代码,if或els原创 2022-01-04 16:26:13 · 276 阅读 · 0 评论 -
C++ Primer 0x04 练习题解
???? C++ Primer 0x04 练习题解更好的阅读体验(实时更新和修正)4.1 基础4.1.2 优先级与结合律4.1 表达式 5 + 10 * 20 / 2 的求值结果是多少1054.2 根据 4.12节中的表,在下述表达式的合理位置添加括号,使得添加括号后,运算对象的组合顺序与添括号前一致(a) *vec.begin()(b) *vec.begin() + 1(a) *(vec.begin())(b) (*(vec.begin())) + 14.1.3 求值顺序原创 2022-01-04 16:23:37 · 403 阅读 · 0 评论 -
C++ Primer 0x04 学习笔记
???? C++ Primer 0x04 学习笔记更好的阅读体验(实时更新和修正)4.1 基础4.1.1 基本概念C++ 定义了一元运算符、二元运算符以及一个三元运算符,看作用于几个对象。函数调用也是特殊的运算符,它对运算对象数量没有限制。一个符号是几元运算符要看上下文理解表达式前要知道运算符优先级、结合律,运算对象求值顺序运算过程中常常发生类型转换自定义事实上已存在的运算符赋予另外含义的操作称为重载运算符使用重载运算符的时候,运算对象的类型和返回值类型都由运算符定义,但是运算对象的个数、原创 2022-01-04 16:21:52 · 354 阅读 · 0 评论 -
C++ Primer 0x03 练习题解
???? C++ Primer 0x03 练习题解更好的阅读体验(实时更新和修正)3.1节 练习3.1 使用恰当的 using 声明重做 1.4.1节 和 2.6.2节 的练习以2.6.2节的1.5.2+1.6的书店程序练习为例原来的书店程序#include <iostream>struct Sales_data { std::string bookNo; unsigned units_sold = 0; double revenue = 0.0;};int ma原创 2022-01-04 16:16:42 · 710 阅读 · 2 评论 -
C++ Primer 0x03 学习笔记
???? C++ Primer 0x03 学习笔记更好的阅读体验(实时更新和修正)3.1 命名空间的 using 声明使用 using 声明可以免去命名空间前缀每个名字都需要独立的 using 声明头文件不应该包含 using 声明,如果头文件里用了 using 声明,那么引用他的文件也会用 using 声明3.2 标准库类型 string使用等号是拷贝初始化,不用等号是直接初始化cin >>读入 string 对象,string 对象会自动忽略开头的空白(空格符、换行符、原创 2022-01-04 16:15:40 · 515 阅读 · 0 评论 -
C++ Primer 0x02 练习题解
???? C++ Primer 0x02 练习题解更好的阅读体验(实时更新与修正)2.1节 练习2.1.1节 练习2.1 类型 int、long、long long 和 short 的区别是什么?无符号类型和带符号类型的区别是什么? float 和 double 的区别是什么?2.2 计算按揭贷款时,对于利率、本金和付款分别应该选择何种数据类型?说明你的理由double类型,涉及浮点运算,精度比float高,运算代价比long double少2.1.2节 练习2.3 读程序写结果原创 2022-01-04 16:14:17 · 604 阅读 · 0 评论 -
C++ Primer 0x02 学习笔记
???? C++ Primer 0x02 学习笔记第 2 章 变量和基本类型2.1 基本内置类型2.1.1 算术类型基本内置类型:算术类型和空类型算术类型:字符、整型数、布尔值、浮点数除了布尔型和扩展字符型,其他整形可以划分为有符号类型和无符号类型char类型可能带符号,可能不带符号无符号类型所有比特位用来存值,有符号类型没有规定怎么存,但应当平衡浮点一般选double,精度比float高,运算代价比long double少,性价比最好2.1.2 类型转换整数类型给浮点类型,小数原创 2022-01-04 16:11:10 · 546 阅读 · 0 评论 -
C++ Primer 0x01 练习题解
???? C++ Primer 0x01 练习题解1.1节 练习练习1.1:查阅编译器的文档,确定它所使用的命名约定,编译并运行第2页的main程序这个练习有 3 个任务点:什么是编译器?查阅使用的编译器文档,确定它所使用的命名约定编译并运行第2页的main程序什么是编译器通俗的说就是翻译官,翻译代码的。人写代码,编译器翻译给机器。查阅使用的编译器文档,确定它所使用的命名约定我使用的是GNU (GNU Compiler Collection) 编译器通过指令g++ --vers原创 2022-01-04 16:10:37 · 536 阅读 · 0 评论 -
《C++ Primer 5th》知识点总结&练习题解
《C++ Primer 5th》知识点总结&练习题解点击获取更好的阅读体验ohmyfish会实时更新和修正,优快云上为囤货文章发布有延迟内容概括基础不牢,地动山摇个人认为,与其零零散散地学一遍,不如系统地浏览一遍,有个全局观以后就当字典了目录章节笔记练习题解第1章:开始C++ Primer 0x01 练习题解第2章:变量和基本类型C++ Primer 0x02 学习笔记C++ Primer 0x02 练习题解第3章:字符串、向量和数组C+原创 2022-01-04 16:09:04 · 2942 阅读 · 0 评论 -
[C++ 面向对象高级编程]知识点补充1
[C++ 面向对象高级编程]知识点补充1文章概述该文章为 侯捷教授的 C++ 面向对象高级编程 课程,主要进行一些知识点补充说明包含一下几个知识点staticclass templatefunction templatenamespace作者信息NEFU 2020级 zslID:fishingrod/鱼竿钓鱼干Email:851892190@qq.com欢迎各位引用此博客,引用时在显眼位置放置原文链接和作者基本信息正文部分static首先来看普通的Complex类的成员函原创 2021-11-07 17:17:39 · 363 阅读 · 0 评论 -
[C++ 面向对象高级编程]string类的实现过程
[C++ 面向对象高级编程]string类的实现过程文章概述该文章为 侯捷教授的 C++ 面向对象高级编程 课程的个人笔记,记录了string类相关的知识点作者信息NEFU 2020级 zslID:fishingrod/鱼竿钓鱼干Email:851892190@qq.com欢迎各位引用此博客,引用时在显眼位置放置原文链接和作者基本信息参考资料感谢前辈们留下的优秀资料,从中学到很多,冒昧引用,如有冒犯可以私信或者在评论区下方指出正文部分相比complex类,string是带指针的类,原创 2021-11-07 16:05:03 · 228 阅读 · 0 评论 -
[C++ 面向对象高级编程]Complex类的实现过程
[C++ 面向对象高级编程]Complex类的实现过程文章概述该文章为侯捷教授 C++面向对象高级编程 课程的个人笔记,非常值得一看,收获很多。作者信息NEFU 2020级 zslID:fishingrod/鱼竿钓鱼干Email:851892190@qq.com欢迎各位引用此博客,引用时在显眼位置放置原文链接和作者基本信息正文部分0.要点准则1.使用防卫式声明2.使用构造函数初始化列表3.尽量使用传引用(本质是指针)代替传值(如果是内置类型double,int之类的传值更快,ST原创 2021-11-05 12:56:46 · 753 阅读 · 0 评论