size 和 capacity 的区别
第 1 步:vector 背后有 8 格空间 第 2 步:size:已经放了 3 个 第 3 步:capacity:不扩容能放 8 个 第 4 步:v[5] 越过了 size,没人拦 3 7 5 vector 的 size() 和 capa
原生数组越界会怎样
5 个元素的原生数组,用 a[10] 去访问,结果是【0】。
reserve 后的容量
运行下面这段程序: #include <iostream> #include <string> #include <vector> using namespace std; int main() {
clear 以后容量还在吗
运行下面这段程序: #include <iostream> #include <string> #include <vector> using namespace std; int main() {
用 at() 让越界现形
补全 safe_get:用 at() 取值,下标越界时接住 out_of_range 异常并返回「越界」。输出下标 1 和下标 9 的结果,格式如 7/越界。 (本题用 g++ -std=c++17 -O0 编译。)
数一数扩了几次容
补全:往空 vector 里依次 push_back 1..100,每当 capacity() 变了就计一次数,最后输出一共扩了几次。(扩容倍数由标准库决定;本平台的 g++ 每次把容量翻倍,从 1 开始。) (本题用 g++ -std=c
先 reserve 就不用扩容
补全:在 push_back 之前先 reserve(100),再依次放进 1..100,输出这一路扩了几次容。 (本题用 g++ -std=c++17 -O0 编译。)
手写翻倍扩容的数组
补全 grow:用 new int[cap * 2] 开新缓冲区、搬数据、delete[] 旧的。从容量 1 开始放 5 个数,输出「容量/个数」,格式如 8/5。 (本题用 g++ -std=c++17 -O0 编译。)
用 sizeof 算出元素个数
补全:原生数组没有 size(),在定义它的地方可以用 sizeof(a) / sizeof(a[0]) 算出个数。求出数组所有元素之和。 (本题用 g++ -std=c++17 -O0 编译。)
原地是什么意思
说一个操作是「原地」做的,意思是【0】。