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