C/C++ 语法速记,持续update...

发布于:2025-07-08 ⋅ 阅读:(17) ⋅ 点赞:(0)

C/C++

关键字

在这里插入图片描述

STL vector

`std::vector` 是 C++ 标准模板库(STL)中最常用的动态数组容器,提供高效的随机访问和动态内存管理。以下是详细用法指南:

---

### **1. 基本操作**
#### **包含头文件**
```cpp
#include <vector>

声明与初始化

// 空vector
std::vector<int> vec1;  

// 指定大小(5个0)
std::vector<int> vec2(5);  

// 指定大小和初始值(5个10)
std::vector<int> vec3(5, 10);  

// 列表初始化
std::vector<int> vec4 = {1, 2, 3, 4, 5};  

// 从数组初始化
int arr[] = {6, 7, 8};
std::vector<int> vec5(arr, arr + sizeof(arr)/sizeof(int));

元素访问

方法 示例 特点
[] vec[2] = 30; 无边界检查(更快)
.at() vec.at(2) = 30; 有边界检查(越界抛异常)
.front() int first = vec.front(); 访问首元素
.back() int last = vec.back(); 访问尾元素
迭代器 for(auto it = vec.begin(); it != vec.end(); ++it) 安全遍历

容量管理

vec.size();      // 当前元素数量 → 3
vec.capacity();  // 实际分配的内存容量 → 4(可能大于size)
vec.empty();     // 是否为空 → false

vec.reserve(100);  // 预分配100个元素的内存(避免多次扩容)
vec.shrink_to_fit(); // 释放多余内存(capacity减到size大小)

修改操作

添加元素
vec.push_back(6);   // 尾部插入 → {1,2,3,4,5,6}
vec.emplace_back(7); // 尾部构造(避免拷贝,C++11)

vec.insert(vec.begin() + 2, 99); // 位置2插入99 → {1,2,99,3,4,5}
删除元素
vec.pop_back();      // 删除尾部 → {1,2,3,4}
vec.erase(vec.begin() + 1); // 删除位置1 → {1,3,4}
vec.erase(vec.begin(), vec.begin() + 2); // 删除范围
vec.clear();         // 清空所有元素

遍历方式

// 1. 下标遍历
for(size_t i=0; i<vec.size(); ++i) {
    std::cout << vec[i] << " ";
}

// 2. 范围for循环(C++11)
for(int num : vec) {
    std::cout << num << " ";
}

// 3. 迭代器
for(auto it = vec.begin(); it != vec.end(); ++it) {
    std::cout << *it << " ";
}

高级用法

自定义类型
struct Person {
    std::string name;
    int age;
    Person(std::string n, int a) : name(n), age(a) {}
};

std::vector<Person> people;
people.emplace_back("Alice", 25);  // 直接构造,避免临时对象
二维数组
std::vector<std::vector<int>> matrix = {
    {1, 2, 3},
    {4, 5, 6},
    {7, 8, 9}
};

// 访问元素
int val = matrix[1][2];  // → 6
与算法库结合
#include <algorithm>
std::sort(vec.begin(), vec.end());  // 排序
auto it = std::find(vec.begin(), vec.end(), 3);  // 查找元素

性能特点

  • 随机访问:O(1) 时间复杂度
  • 尾部插入/删除:平均 O(1)
  • 中间插入/删除:O(n)(需移动元素)
  • 内存增长策略:通常按当前容量的 50%~100% 扩容(实现相关)

最佳实践

  1. 优先用 emplace_back() 替代 push_back()(避免拷贝)
  2. 循环中插入/删除元素时注意迭代器失效问题
  3. 预分配内存:reserve() 减少扩容开销
  4. 传递大 vector 时使用引用:void func(const std::vector<int>& vec)
  5. C++17 支持结构化绑定:
    for(const auto& [x,y] : points) { ... }
    

完整文档参考:cppreference - vector


网站公告

今日签到

点亮在社区的每一天
去签到