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

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

1. std::vector 的基本使用

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

#include 

示例:

#include 
#include 

int main() {
    std::vector 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 vec;  // 空 vector

2.2 指定大小的构造

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

2.3 指定大小和默认值

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

2.4 使用初始化列表

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

2.5 使用迭代器区间

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

3. vector 的访问函数

C++:std::vector常用函数及用法详解_第1张图片

示例:

#include 
#include 

int main() {
    std::vector 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 的修改函数

C++:std::vector常用函数及用法详解_第2张图片4.1 添加元素

4.1 添加元素

std::vector 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 的容量函数

C++:std::vector常用函数及用法详解_第3张图片

示例

#include 
#include 

int main() {
    std::vector 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 
std::vector 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)。

你可能感兴趣的:(c++,c++,算法,开发语言)