C++:std::vector常用函数及用法详解

std::vector 是 C++ 标准库中最常用的动态数组容器,提供了丰富的操作方法,支持动态扩展、插入、删除等操作。本文将详细介绍 vector 的常用函数及其用法,并配合代码示例说明。

1. std::vector 的基本使用

在 C++ 中,vector 需要包含头文件:

#include <vector>

示例:

#include <iostream>
#include <vector>

int main() {
    std::vector<int> vec = {1, 2, 3, 4, 5};
    for (int num : vec) {
        std::cout << num << " ";
    }
    return 0;
}

输出

1 2 3 4 5

2. vector 的构造与初始化

2.1 默认构造

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

2.2 指定大小的构造

std::vector<int> vec(5);  // 生成5个默认值0的元素

2.3 指定大小和默认值

std::vector<int> vec(5, 10);  // 生成5个值为10的元素

2.4 使用初始化列表

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

2.5 使用迭代器区间

std::vector<int> vec1 = {1, 2, 3, 4, 5};
std::vector<int> vec2(vec1.begin(), vec1.begin() + 3);  // {1, 2, 3}

3. vector 的访问函数

示例:

#include <iostream>
#include <vector>

int main() {
    std::vector<int> vec = {10, 20, 30, 40, 50};

    std::cout << "Element at index 2: " << vec[2] << std::endl;
    std::cout << "Element at index 3 (using at()): " << vec.at(3) << std::endl;
    std::cout << "First element: " << vec.front() << std::endl;
    std::cout << "Last element: " << vec.back() << std::endl;

    return 0;
}

输出

Element at index 2: 30
Element at index 3 (using at()): 40
First element: 10
Last element: 50

注意at() 进行范围检查,如果索引越界会抛出 std::out_of_range 异常,而 operator[] 不会 进行检查,可能导致未定义行为。

4. vector 的修改函数

4.1 添加元素

4.1 添加元素

std::vector<int> vec;
vec.push_back(10);
vec.push_back(20);
vec.push_back(30);  // {10, 20, 30}

4.2 删除元素

vec.pop_back();  // {10, 20}

4.3 插入元素

vec.insert(vec.begin() + 1, 15);  // {10, 15, 20}

4.4 删除指定位置的元素

vec.erase(vec.begin() + 1);  // {10, 20}

4.5 清空 vector

vec.clear();  // 变为空 {}

4.6 改变 vector 的大小

vec.resize(5, 100);  // {100, 100, 100, 100, 100}

 5. vector 的容量函数

示例

#include <iostream>
#include <vector>

int main() {
    std::vector<int> vec;
    std::cout << "Initial size: " << vec.size() << ", capacity: " << vec.capacity() << std::endl;

    vec.reserve(100);
    std::cout << "After reserve(100): capacity = " << vec.capacity() << std::endl;

    vec.shrink_to_fit();
    std::cout << "After shrink_to_fit(): capacity = " << vec.capacity() << std::endl;

    return 0;
}

输出示例

Initial size: 0, capacity: 0
After reserve(100): capacity = 100
After shrink_to_fit(): capacity = 0

6. vector 的排序和查找

6.1 排序

#include <algorithm>
std::vector<int> vec = {5, 3, 8, 1};
std::sort(vec.begin(), vec.end());  // {1, 3, 5, 8}

6.2 反向排序

std::sort(vec.rbegin(), vec.rend());  // {8, 5, 3, 1}

6.3 查找元素

auto it = std::find(vec.begin(), vec.end(), 3);
if (it != vec.end()) {
    std::cout << "Found at index: " << std::distance(vec.begin(), it);
}

7. vector 与指针的关系

vector 底层存储数据为 连续内存,可以通过 data() 获取指向其首元素的指针:

int* ptr = vec.data();

可以用于 C 风格 API:

void processArray(int* arr, int size) { /* 处理数组 */ }

processArray(vec.data(), vec.size());

总结

vector 适用于:

  • 需要动态数组的场景。
  • 频繁访问元素时(O(1) 访问)。
  • 需要方便地插入/删除末尾元素(O(1) 操作)。

vector 不适用于:

  • 需要高效地在中间插入/删除元素(可使用 std::list)。
  • 需要固定大小的数组(可使用 std::array)。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值