// ===== CodeLab: C++ STL 容器:vector =====
// 来源: https://aoerliang.dpdns.org/articles/cpp-stl-vector
// 以下代码片段按文章出现顺序拼接, 共 4 段

// ----- 片段 1 (cpp) -----
#include <vector>
using namespace std;

vector<int> v1;                 // 空 vector
vector<int> v2(5, 10);          // 5 个 10
vector<int> v3 = {1, 2, 3, 4};  // 初始化列表

v3.push_back(5);                // 尾部追加 → {1,2,3,4,5}
v3.pop_back();                  // 删除尾部 → {1,2,3,4}
v3.insert(v3.begin() + 1, 99);  // 中间插入,较慢
v3.erase(v3.begin() + 2);       // 删除第 3 个元素
int n = v3.size();              // 元素个数
bool empty = v3.empty();        // 是否为空
v3.clear();                     // 清空所有元素

// ----- 片段 2 (cpp) -----
// 方式一:下标(需要随机访问时用)
for (size_t i = 0; i < v.size(); ++i) {
    cout << v[i] << " ";
}

// 方式二:范围 for(C++11,只读用)
for (int x : v) {
    cout << x << " ";
}

// 方式三:迭代器(通用,所有 STL 容器适用)
for (auto it = v.begin(); it != v.end(); ++it) {
    cout << *it << " ";
}

// ----- 片段 3 (cpp) -----
vector<int> v;
v.reserve(1000);   // 提前预留,避免反复扩容
for (int i = 0; i < 1000; ++i) {
    v.push_back(i);   // 全程零扩容,速度飞快
}

// ----- 片段 4 (cpp) -----
#include <algorithm>

sort(v.begin(), v.end());                // 升序排序
sort(v.begin(), v.end(), greater<int>()); // 降序

auto it = find(v.begin(), v.end(), 42);
if (it != v.end()) {
    cout << "找到了,下标 " << (it - v.begin());
}

int mx = *max_element(v.begin(), v.end());
int sum = accumulate(v.begin(), v.end(), 0);
