C++语法、标准库与复杂度速查
公式表对象生存期、RAII、泛型、STL、错误、并发和工程命令的条件化速查。
关联:全课程
- 符号说明
[first,last);O(1)/O(log n)/O(n)/O(n log n);RAII;Rule of Zero;happens-before
- 使用前提
完成对应课时并通过章内两道C++代码题。
- 适用范围
用于复算与复习;具体结论须结合C++标准版本、容器操作、对象生存期和并发同步。
C++语法、标准库与复杂度速查
声明、对象与资源
- 使用花括号初始化抑制部分窄化;
const T&可避免大对象复制并接受临时量,但不得逃逸其有效生存期。 unique_ptr表达独占所有权,shared_ptr表达共享计数,weak_ptr打断共享环;观察指针不拥有资源。- Rule of Zero优先;自管资源时再审查析构、拷贝、移动五个特殊成员。移动后对象仍有效但值通常未指定。
- 成员按声明顺序初始化,不按初始化列表书写顺序。
泛型与STL
- 区间采用
[first,last);算法操作迭代器范围,不拥有容器。 vector随机访问O(1)、尾插摊销O(1)、中间插删O(n);扩容会使元素指针/引用/迭代器失效。map/set典型查找O(log n);unordered_map/set平均O(1)、最坏O(n),并受哈希与重散列影响。sort要求严格弱序,O(n log n);stable_sort保留等价元素相对顺序;线性查找O(n),二分查找O(log n)但要求有序与随机访问成本可控。- erase-remove:算法把保留元素前移并返回新逻辑结尾,容器
erase才真正缩短。
错误与并发
- 基本保证:失败后对象仍有效且无泄漏;强保证:失败如同未发生;nothrow:承诺不抛异常。
- 输入流失败后须检查状态;清除状态前错误读取不会自动成功。外部输入验证不能用
assert替代。 - 冲突访问至少一个写且无happens-before会形成数据竞态;mutex的unlock到后续lock建立同步。
condition_variable::wait必须在循环中检查谓词;join确保线程结束且结果可见。
工程命令
- 在线判题基线:
g++ -std=c++17 -O2 main.cc;本地教学基线可追加-Wall -Wextra -pedantic -pthread。C++20扩展必须单独声明。 - 调试构建可加入
-g -fsanitize=address,undefined;并发另用适合环境的线程检测工具。 - 性能比较固定编译模式、工作负载、预热、样本数和指标;大O不替代测量,单次测量不证明改进。