c++ std::vector 是什么意思怎么使用

std::vector 是 C++ 标准库里的一个动态数组,简单说就是个“能自己长大的数组”,比普通数组好用多了。

啥是 std::vector?

想象你在买东西,篮子一开始装 5 个苹果,装满了咋办?普通数组(int arr[5])就傻眼了,满了就满了。std::vector 像个魔法篮子,装满时它会自己变大,能塞更多东西,还能告诉你现在有多少货。

简单说:std::vector 是一个灵活的容器,能动态调整大小,存一堆同类型的数据。

为啥用它?

动态大小:不用提前定死长度,想加就加。

方便:自带方法,比如加元素、删元素、查大小。

安全:比手动管理内存的数组少出错。

怎么用?

得先包含头文件 ,然后就可以开玩了。

1. 创建 vector

#include <vector>
#include <iostream>

int main() {
    std::vector<int> numbers; // 创建一个空 vector,装整数
    std::cout << "初始大小: " << numbers.size() << "\n"; // 0
    return 0;
}

std::vector<类型>:定义 vector,<> 里写存啥类型(比如 int、double)。 size():告诉你现在有多少元素。

2. 加元素

可以用 push_back 加东西:

#include <vector>
#include <iostream>

int main() {
    std::vector<int> numbers;
    numbers.push_back(10); // 加个 10
    numbers.push_back(20); // 再加个 20
    numbers.push_back(30); // 再加个 30
    std::cout << "大小: " << numbers.size() << "\n"; // 3
    std::cout << "第一个: " << numbers[0] << "\n";   // 10
    return 0;
}

push_back(值):往尾巴加元素,vector 自动扩容。 用 [] 访问元素,跟数组一样,从 0 开始。

3. 初始化带值

不想一个个加,可以直接给初始值:

#include <vector>
#include <iostream>

int main() {
    // 直接放3个值
    std::vector<int> numbers = {10, 20, 30};
    std::cout << "大小: " << numbers.size() << "\n"; // 3

    // 或者用构造函数
    std::vector<int> five_zeros(5, 0); // 5个0
    std::cout << "five_zeros 大小: " << five_zeros.size() << "\n"; // 5
    std::cout << "第一个: " << five_zeros[0] << "\n"; // 0
    return 0;
}

{10, 20, 30}:C++11 的初始化列表。 (5, 0):创建 5 个元素,全填 0。

4. 遍历 vector

想看看里面有啥,有几种办法:

#include <vector>
#include <iostream>

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

    // 用普通循环
    for (size_t i = 0; i < numbers.size(); i++) {
        std::cout << numbers[i] << " ";
    }
    std::cout << "\n";

    // 用范围 for(C++11)
    for (int num : numbers) {
        std::cout << num << " ";
    }
    std::cout << "\n";
    return 0;
}

输出:

10 20 30 
10 20 30 

size_t:无符号整数,适合循环索引。 for (int num : numbers):简洁,挨个拿元素。

5. 加删改查

#include <vector>
#include <iostream>

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

    // 加元素
    numbers.push_back(40); // 尾加
    std::cout << "加后: " << numbers.size() << "\n"; // 4

    // 改元素
    numbers[1] = 50; // 把 20 改成 50
    std::cout << "改后: " << numbers[1] << "\n"; // 50

    // 删元素
    numbers.pop_back(); // 删尾巴的 40
    std::cout << "删后大小: " << numbers.size() << "\n"; // 3

    // 清空
    numbers.clear();
    std::cout << "清空后: " << numbers.size() << "\n"; // 0
    return 0;
}

6. 容量 vs 大小

#include <vector>
#include <iostream>

int main() {
    std::vector<int> numbers;
    numbers.reserve(10); // 预留10个空间
    std::cout << "容量: " << numbers.capacity() << "\n"; // 10
    std::cout << "大小: " << numbers.size() << "\n";     // 0

    numbers.push_back(1);
    std::cout << "加1后大小: " << numbers.size() << "\n"; // 1
    return 0;
}

注意点

越界小心: numbers[100] 不会报错,但可能崩,用 at(100) 会抛异常。

try {
    numbers.at(100); // 越界
} catch (const std::out_of_range& e) {
    std::cout << "越界了: " << e.what() << "\n";
}

性能: push_back 很快,但容量不够时会重新分配,慢一点。 用 reserve 预分配,能省时间。

类型灵活: 不只装 int,啥都能装:

需要掌握啥?

创建和初始化:空 vector、带值、预留空间。

增删改查:

pushback、popback、clear。

用 [] 或 at() 访问。

遍历:普通循环或范围 for。

大小和容量:size() 和 capacity() 的区别。

场景:存动态数据,比如用户输入、文件内容。

总结 std::vector 是 C++ 的动态数组,能伸能缩。

用法简单:加(pushback)、删(popback)、查([])、循环。

比普通数组方便,现代 C++ 必备。

文档信息

版权声明:可自由转载(请注明转载出处)-非商用-非衍生

发表时间:2025年7月1日 11:40