cppreference 速通指北

本文将简要介绍 cppreference 的 cpp 部分中,较为古典且常用的部分;同时,也尽量包含部分在特定场景中较为实用的内容,也许在某些场合有很好的效果

注意:许多较为现代的,或者更多应用于项目的内容并未提及,请自行查找

另外,感谢 czm233 提供的帮助!

# 容器库

在阅读以下容器的相关页面时,可以留心 迭代器 概念:可以将其理解为包装过的指针

本部分包含了若干容器,以下是较为常用的容器,按高频到低频(主观)排序:

> vector

可以搜索一下 vector 的底层实现方法

> set(及 multiset)

可以重点关注 .lower_bound(...) 等成员函数,及迭代器的用法

> map

可以关注 元素的插入删除机制 以及 operator[]

> deque

可以常数时间下标访问,但是内存不连续

> priority_queue

可以了解如何修改或自定义比较函数,例如 priority_queue<T, vector<T>, greater<T>>

> unordered_map

可以学习哈希表相关知识

> array

可以当作部分 pair 和 tuple 的替用品,或者替代原生数组

# 一些其他容器

> bitset

> basic_string

另外,可以参阅 C 的字符串函数

# IO

> cpp 风格 IO

可以了解 stringstream 类,以及 输入/输出操纵符

> C 风格 IO

+ fopen

+ freopen

+ sscanf

+ sprintf

# 算法库

> sort

> unique

> reverse

> shuffle

> nth_element

> lower_bound

> next_permutation



本部分为较为常用的语法糖或语法特性

#

可以了解静态成员,构造及析构函数,并使用这些特性(例如分段计时,记录 dfs 深度等)

示例:

int global_indent = 0;

struct indenter{
	indenter() { global_indent++; }
	~indenter() { global_indent--; }
};

void doIndent() {
	for (i = global_indent; i; i--) { printf("  "); }
}

void dfs(...) {
	indenter _ind;
	
	doIndent(); fprintf(stderr, "log...\n");

	for (...) dfs(...);
}

# 基于范围的 for 循环

示例:

vector <int> vec;
for (...) vec.push_back(...);
for (auto it: vec) {...}

# lambda 表达式

推荐找点实例来看,在一定程度上能简化代码。注意效率可能较低

示例:

sort(a, a + n, [] (int p, int q) { return p > q; });
queue <int> que;
auto doPush = [&] (int ff) {
	dis[ff] = ...;
	que.push(ff);
};
doPush(1);
while (!que.empty()) {
	for (...) {
		doPush(...);
	}
}


本部分较为不常用,简要了解即可

# 正则表达式库

正则表达式方言较多,可去网上学习一下

使用起来略麻烦,但是比 以流为基础的 IO(scanf 类)强

另外,正则表达式在一些文本编辑软件(如 sublime text)中也有十分强大的作用

# 工具库/动态内存管理

较为现代的指针

> shared_ptr

> unique_ptr

# 工具库/通用工具

> swap

> exchange

> forward

> move

# 工具库/程序支持工具

> abort

> exit

> atexit

> system

# 工具库/类型支持

> numeric_limits

posted @ 2024-03-28 20:56  Xi'En  阅读(516)  评论(0编辑  收藏  举报