CPlusPlusThings

C++那些事

43,115 stars C++ Markdown Skills API Spec #cplusplus#cpp#cpp11#cpp14
AI Prompts & Specs

Repository: Light-City/CPlusPlusThings


Stars: 43054

README.md


- C++ 那些事
- 重磅项目
- 关于作者
- 项目运行
- 方式1: vscode + bazel
- 方式2: docker
- 方式3: g++
- 视频学习本项目
- 飞书知识库
- 基础进阶
- 实战系列
- 10 日狂练
- 重点实战练习
- C++2.0 新特性
- 概况
- C++11 新特性
- C++14/17/20
- 设计模式
- STL 源码剖析
- 并发编程
- C++ Concurrency in Action
- 多线程与多进程
- Threading In C++
- C++ 惯用法
- 你最喜欢的 c++ 编程风格惯用法是什么?
- 学习课程
- 极客时间《现代 C++ 实战 30 讲》
- 工具篇
- 容器快捷输出工具
- 像 Python 一样简单输出(Jupyter Notebook)
- 观察编译过程变化
- C++ 的 Debug 工具 dbg-macro
- 在 Linux 上的 Debug 工具 rr - 拥有回到过去的能力
- 拓展部分
- 一些问题
- 贡献者

C++ 那些事


感谢各位对《C++ 那些事》的支持,现将内容也同步至B站,以视频的方式展示,可以打开网站直接阅读~欢迎大家 star、转发、PR。

在线个人博客:光城的实验室

在线学习网站:C++那些事

- 中文名:C++ 那些事
- 英文名:Stories About C Plus Plus

这是一个适合初学者从<u>入门到进阶</u>的仓库,解决了<u>面试者与学习者</u>想要<u>深入 C++</u> 及如何<u>入坑 C++</u> 的问题。除此之外,本仓库拓展了更加深入的源码分析,多线程并发等的知识,是一个比较全面的 C++ 学习从入门到进阶提升的仓库。


重磅项目

推出一系列重磅项目,带大家实战学习C++,配合本开源项目学习,成长飞快!

直通点:戳这里

关于作者

公众号已开放两大入口,分别是专辑与菜单,可以直接在微信公众号上阅读《C++ 那些事》内容,配上该仓库的代码,将会非常的爽,建议大家关注一波。

个人公众号:guangcity

或者扫下面的二维码,欢迎大家反馈及 C++ 交流,本人在微信创建了 C++ 那些事交流群,优质的 C++ 资源交流区,期待大家关注上面公众号,点击公众号右下角->联系我,拉你入群。

---

>关注我

如果觉得不错,关注我吧~

<table>
<tbody>
<tr>
<th align="center" style="height=200 width="200">
<img src="./img/cpp.jpg" height="200" width="200" ><br>
星球
</th>
<th align="center" style="height=200 width="200">
<img src="./img/wechat.jpg" height="200" width="200" ><br>
微信公众号
</th>
</tr>
</tbody>
</table>


项目运行


#### 方式1: vscode + bazel

#### 方式2: docker

新推出免开发环境,docker环境,大家可以pull下面镜像:

text
docker pull xingfranics/cplusplusthings:latest

#### 方式3: g++


视频学习本项目

第一期:Step By Step上手编译本项目

第二期:免开发环境docker

第三期:手把手共读HashTable,彻底搞懂C++ STL

第四期:手把手共读STL之enable_shared_from_this

第五期:手把手共读STL之线程,从C++11 thread到C++20 jthread

第六期:手把手共读STL之共读condition_variable、condition_variable_any

第七期:手把手共读STL之Mutex

第八期:手把手共读STL之RAII Lock

飞书知识库

互联网大厂面试实录

拿下offer之必备面经


基础进阶

- const 那些事
- static 那些事
- this 那些事
- inline 那些事
- sizeof 那些事
- 函数指针那些事
- 纯虚函数和抽象类那些事
- vptr_vtable 那些事
- virtual 那些事
- volatile 那些事
- assert 那些事
- 位域那些事
- extern 那些事
- struct 那些事
- structclass 那些事
- union 那些事
- c 实现 c++ 多态那些事
- explicit 那些事
- friend 那些事
- using 那些事
- :: 那些事
- enum 那些事
- decltype 那些事
- 引用与指针那些事
- 宏那些事

实战系列

#### 10 日狂练

- day1-基本语法

- day2-递归、结构体、枚举、静态变量等

- day3-函数1

- day4-函数2

- day5-继承多态

- day6-虚函数与抽象类

- day7-运算符重载

- day8-模版与STL

- day9-异常

- day10-文件与流

#### 重点实战练习

- 中括号重载.cpp

- 时钟++运算符重载.cpp

- 运算符重载之强制转换.cpp

- 重载圆括号的时钟.cpp

- 函数模板.cpp

- 动态数组.cpp

- 字典插入与查找.cpp

- 异常捕获.cpp

- 类模板之栈.cpp

- 类模板特化之数组.cpp

- 继承与封装.cpp

- 读写文件综合题.cpp

- 输入输出运算符重载.cpp

- 输入输出重载.cpp

- 输出格式.cpp


C++2.0 新特性

#### 概况

C++2.0 是一个简称,意为「现代 C++」,包括 C++11/14/17/20。

#### C++11 新特性

- Variadic Templates

- Spaces in Template Expressions

cpp
vector<list<int> > //ok in each C++ version
vector<list<int>> // before c++ 11 error error: ‘>>’ should be ‘> >’ within a nested template argument list,c++11后可以正常通过

- nullptr and nullptr_t

- Automatic Type Deduction with auto

- Uniform Initialization

- initializer_list

- explicit for ctors taking more than one argument

- range-based for statement

cpp
for(decl:col) {
statement
}

- =default,=delete

如果你自行定义了一个 ctor, 那么编译器就不会给你一个 default ctor
如果强制加上 =default, 就可以重新获得并使用 default ctor.

- Alias(化名) Template (template typedef)

- alias.cpp
- template_template.cpp

- template template parameter

- type alias

- noexcept

- override

- final

- decltype

- lambda

- Rvalue reference

- move aware class

- 容器-结构与分类

- (1) 序列式容器包括:array(C++2.0 新引入),vector,deque,list,forward_list(C++2.0 新引入)
- (2) 关联式容器包括:set/multiset,map/multimap
- (3) 无序容器(C++2.0 新引入,更换原先 hash_xxxunordered_xxx)包括:unordered_map/unordered_multimap,unordered_set/unordered_multiset

- Hash Function

- tuple

学习资料:https://www.bilibili.com/video/av51863195?from=search&seid=3610634846288253061

#### C++14/17/20

待更新...

设计模式

- 单例模式
- 生产消费者模式

STL 源码剖析

STL 源码剖析:gcc 4.9.1

- array
- deque
- queue and stack
- list
- vector
- typename
- traits
- iterator
- 谈谈 STL 设计之 EBO 优化
- rb_tree
- set and multiset
- map and multimap
- hashtable
- myhashtable
- unordered_map

并发编程

#### C++ Concurrency in Action

- 第一章
- 第二章

学习资料:https://downdemo.gitbook.io/cpp-concurrency-in-action-2ed/

#### 多线程与多进程

##### Threading In C++

- 介绍
- 创建线程的五种类型
- Join 与 Detachs
- mutex in C++ Threading

学习自:

> https://www.youtube.com/watch?v=eZ8yKZo-PGw&list=PLk6CEY9XxSIAeK-EAh3hB4fgNvYkYmghp&index=4

C++ 惯用法

##### 你最喜欢的 c++ 编程风格惯用法是什么?

- 1.类初始化列表
- 2.枚举类替换命名空间
- 3.RAII (资源获取即初始化)
- 4.copy and swap
- 5.pImpl (指针指向具体实现)

学习课程

#### 极客时间《现代 C++ 实战 30 讲》

- 堆、栈、RAII:C++ 里该如何管理资源?
-
-
- RAII
- 自己动手,实现 C++ 的智能指针
- auto_ptr、scope_ptr
- unique_ptr
- shared_ptr
- 右值和移动究竟解决了什么问题?
- 左值与右值
- 延长声明周期
- 引用折叠
- 完美转发
- 不要返回本地变量的引用
- 容器 1
- 容器 2
- 异常
- 字面量、静态断言和成员函数说明符
- 是不是应该返回对象?
- 编译期多态:泛型编程和模板入门
- 译期能做些什么?一个完整的计算世界
- SFINAE:不是错误的替换失败是怎么回事?
- constexpr:一个常态的世界
- 函数对象和 lambda:进入函数式编程
- 内存模型和 atomic:理解并发的复杂性

工具篇

#### 容器快捷输出工具

对吴老师的代码进行了修改,点击此处直通代码

输入:

cpp
map<int, int> mp{
{1, 1},
{2, 4},
{3, 9}};
cout << mp << endl;

输出结果显示:

cpp
{ 1 => 1, 2 => 4, 3 => 9 }

#### 像 Python 一样简单输出(Jupyter Notebook)

- 像 Python 一样玩 C/C++

#### 观察编译过程变化

- https://cppinsights.io

#### C++ 的 Debug 工具 dbg-macro

- C++ 的 Debug 工具 dbg-macro

#### 在 Linux 上的 Debug 工具 rr - 拥有回到过去的能力
- 用 rr 来进行 debug

拓展部分

#### 一些问题

- C++ 中如何将 string 类型转换为 int 类型?

贡献者

| 贡献人 | 地址 |
| ------- | ----------------------------- |
| 光城 | https://github.com/Light-City |
| ChungZH | https://github.com/ChungZH |
| xliu79 | https://github.com/xliu79 |