C++ vector

1. ​std::vector 基本概念

  • 定义std::vector 是 C++ 标准库提供的动态数组容器,支持随机访问和动态扩容。
  • 头文件#include <vector>
  • 特性
    • 元素在内存中连续存储(类似数组)。
    • 自动扩容(当容量不足时重新分配内存)。
    • 提供迭代器支持。

2. ​构造函数(Constructors)​

(1) ​默认构造函数
vector<int> vec1;  // 创建一个空vector,size=0,capacity=0
(2) ​指定初始大小和默认值
vector<int> vec2(5);       // 5个元素,默认初始化(int为0)
vector<double> vec3(5, 3.14);  // 5个元素,每个值为3.14
(3) ​通过迭代器范围构造
int arr[] = {1, 2, 3};
vector<int> vec4(arr, arr + 3);  // 复制数组的[arr, arr+3)范围元素
(4) ​拷贝构造函数
vector<int> vec5(vec4);  // 深拷贝vec4的内容

3. ​修改元素的成员函数

(1) ​push_back()

在末尾添加元素(拷贝语义):

vector<int> vec;
vec.push_back(10);  // 添加元素10到末尾
(2) ​insert()

插入元素到指定位置,支持以下重载:

  • 插入单个值
    vector<int> vec = {1, 3};
    vec.insert(vec.begin() + 1, 2);  // 在位置1插入2 → {1, 2, 3}
  • 插入多个相同值
    vec.insert(vec.end(), 2, 4);  // 在末尾插入2个4 → {1, 2, 3, 4, 4}
  • 通过迭代器范围插入
  • int arr[] = {5, 6};
    vec.insert(vec.end(), arr, arr + 2);  // 插入数组内容 → {1, 2, 3, 4, 4, 5, 6}
(3) ​erase()

删除指定位置或范围的元素:

  • 删除单个元素
    vec.erase(vec.begin() + 1);  // 删除位置1的元素 → {1, 3, 4, 4, 5, 6}
  • 删除范围元素
    vec.erase(vec.begin() + 3, vec.end());  // 删除位置3到末尾 → {1, 3, 4}
(4) ​clear()

清空所有元素(size=0,capacity不变):

vec.clear();
(5) ​assign()

重新分配元素(覆盖原有内容):

  • 指定数量和值
    vec.assign(3, 10);  // 3个10 → {10, 10, 10}
  • 通过迭代器范围
    int arr[] = {20, 30, 40};
    vec.assign(arr, arr + 2);  // 复制前2个元素 → {20, 30}

4. ​访问元素的成员函数

(1) ​operator[]

通过下标访问(不检查越界):

int x = vec[0];  // 访问第一个元素
(2) ​at()

通过下标访问:

int y = vec.at(1);  // 访问第二个元素
(3) ​front() 和 back()

访问首尾元素:

int first = vec.front();  // 第一个元素
int last = vec.back();    // 最后一个元素

5. ​容量管理的成员函数

(1) ​size() 和 capacity()

获取元素数量和当前容量:

size_t s = vec.size();      // 当前元素数量
size_t c = vec.capacity();  // 当前分配的内存容量
(2) ​resize()

调整元素数量:

vec.resize(5);      // 调整size=5,多出的元素默认初始化(int为0)
vec.resize(3, 100); // 调整size=3,若需要新增元素则初始化为100
(3) ​reserve()

预分配内存(避免多次扩容):

vec.reserve(100);  // 分配至少容纳100个元素的内存

6. ​迭代器操作

  • begin() 和 end()
    for (vector<int>::iterator it = vec.begin(); it != vec.end(); ++it) {
        cout << *it << " ";
    }
  • rbegin() 和 rend()(反向迭代器)​:
    for (vector<int>::reverse_iterator rit = vec.rbegin(); rit != vec.rend(); ++rit) {
        cout << *rit << " ";
    }

7. ​注意事项

  • 扩容机制:当 size() == capacity() 时,push_back 或 insert 会触发扩容。
  • 迭代器失效:插入或删除操作可能导致迭代器失效(这个会在我后续的文章中详细解决迭代器失效的问题)。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值