C++ 中的 vector 容器详解与应用示例

vector 是 C++ 标准模板库(STL)中最常用的顺序容器之一。与数组相比,vector 具有动态大小调整、内存自动管理等特点,极大地方便了日常编程工作。本文将从 vector 的基本用法、常用操作、具体示例等方面进行详细介绍。

1. vector 简介

vector 是一种动态数组,可以根据需要自动调整其大小。在添加或删除元素时,vector 会自动分配和释放内存。

常见的 vector 操作:
  • 自动扩展:当 vector 容量不足时,自动增加容量。
  • 随机访问:通过下标访问元素,时间复杂度为 O(1)。
  • 自动管理内存:当 vector 被销毁时,自动释放内存。

2. vector 的基本用法

#include <iostream>
#include <vector>

int main() {
    // 定义一个存储 int 类型的 vector
    std::vector<int> vec;

    // 向 vector 中添加元素
    vec.push_back(10);
    vec.push_back(20);
    vec.push_back(30);

    // 输出 vector 的元素
    for (int i = 0; i < vec.size(); ++i) {
        std::cout << "vec[" << i << "] = " << vec[i] << std::endl;
    }

    // 获取 vector 的大小
    std::cout << "Vector size: " << vec.size() << std::endl;

    return 0;
}
vec[0] = 10
vec[1] = 20
vec[2] = 30
Vector size: 3

 在上面的代码中,push_back() 用于向 vector 的尾部添加元素,size() 用于获取当前元素的个数。

3. 常用操作

1. 初始化 vector

可以通过多种方式初始化 vector

// 空的 vector
std::vector<int> v1;

// 使用默认值初始化
std::vector<int> v2(5);  // 创建包含 5 个元素的 vector,初始值为 0
std::vector<int> v3(5, 100);  // 创建 5 个元素,初始值为 100

// 使用已有数组初始化
int arr[] = {1, 2, 3, 4, 5};
std::vector<int> v4(arr, arr + 5);  // 使用数组的指针初始化

2. 插入与删除操作

#include <iostream>
#include <vector>

int main() {
    std::vector<int> vec = {1, 2, 3, 4, 5};

    // 在指定位置插入元素
    vec.insert(vec.begin() + 2, 10);  // 在第三个位置插入 10

    // 输出 vector 的所有元素
    for (int v : vec) {
        std::cout << v << " ";
    }
    std::cout << std::endl;

    // 删除第三个元素
    vec.erase(vec.begin() + 2);

    // 输出删除后的元素
    for (int v : vec) {
        std::cout << v << " ";
    }
    std::cout << std::endl;

    return 0;
}

 输出结果:

 

1 2 10 3 4 5 
1 2 3 4 5 

3. 清空与释放内存

std::vector<int> vec = {1, 2, 3};
vec.clear();  // 清空 vector,但容量不变
vec.shrink_to_fit();  // 释放未使用的内存

4. vector 的高级用法

1. 迭代器

vector 提供了随机访问迭代器,可以方便地遍历容器:

#include <iostream>
#include <vector>

int main() {
    std::vector<int> vec = {1, 2, 3, 4, 5};

    // 使用迭代器遍历 vector
    for (std::vector<int>::iterator it = vec.begin(); it != vec.end(); ++it) {
        std::cout << *it << " ";
    }
    std::cout << std::endl;

    return 0;
}

2. 反向遍历

vector 允许反向遍历

for (auto it = vec.rbegin(); it != vec.rend(); ++it) {
    std::cout << *it << " ";
}

3. 动态调整容量

vector 自动管理内存,但我们可以手动控制容量:

std::vector<int> vec;
vec.reserve(100);  // 预分配内存,防止频繁重新分配

5. 常见问题与优化

  1. 频繁插入删除问题vector 的插入和删除操作在末尾效率较高,但在中间位置操作会导致大量元素的移动,建议在需要频繁插入或删除的情况下使用 std::liststd::deque

  2. 内存管理vector 在增长时会以倍数方式分配内存,减少内存分配的次数以提高效率。因此,如果已知大致的容量,可以提前使用 reserve() 进行预分配。

  3. 数据访问vector 支持随机访问,访问效率非常高。与 list 相比,vector 更适合频繁访问数据的场景。

6. 总结

vector 作为 C++ 中最常用的容器之一,提供了灵活、高效的动态数组操作。它不仅可以自动管理内存,还支持随机访问、动态调整大小等功能。在实际开发中,我们应根据不同的应用场景选择合适的 STL 容器,vector 适用于大多数需要动态数组的场景。

通过上述的代码示例,大家可以更好地理解 vector 的基本操作和高级用法。在未来的开发中,熟练使用 vector 将显著提高代码的可维护性和性能。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值