std::vector是C++中动态数组的首选,核心在于其自动扩容机制,通过size()和capacity()管理内存,支持高效尾部操作与随机访问,适用于数据量不确定但需连续存储的场景。

std::vector 简直是 C++ 标准库里的一块基石,它把我们从传统 C 风格数组那些繁琐的内存管理中彻底解放了出来。说白了,它就是一个能自动扩容和缩减的“智能”数组,让你能像操作普通数组一样方便,同时又不用担心内存泄漏或者越界问题(当然,前提是你用对了)。对我来说,它几乎是处理同类型数据集合时的首选,尤其当你不确定数据量大小时,它的便利性简直无与伦比。
使用
std::vector
push_back()
#include <vector>
#include <iostream>
#include <string> // 用于 MyObject 示例
int main() {
std::vector<int> scores; // 创建一个空的整型vector
scores.push_back(95); // 添加一个元素
scores.push_back(88);
scores.push_back(72);
// 访问元素,就像普通数组一样
std::cout << "第一个分数: " << scores[0] << std::endl; // 输出 95
// 遍历所有元素
for (int score : scores) {
std::cout << score << " ";
}
std::cout << std::endl; // 输出 95 88 72
// 移除最后一个元素
scores.pop_back(); // 移除了 72
std::cout << "移除后的大小: " << scores.size() << std::endl; // 输出 2
// 插入和删除,这两个操作需要注意性能
scores.insert(scores.begin() + 1, 90); // 在第二个位置插入 90
// 现在 scores 是 95, 90, 88
scores.erase(scores.begin()); // 移除第一个元素
// 现在 scores 是 90, 88
// 清空所有元素
scores.clear();
std::cout << "清空后的大小: " << scores.size() << std::endl; // 输出 0
return 0;
}这里面
push_back()
pop_back()
operator[]
at()
at()
insert()
erase()
clear()
vector
capacity
这可能是
std::vector
int arr[10];
std::vector
说白了,
vector
size()
capacity()
size()
capacity()
size()
capacity()
vector
capacity
这种机制的优点是,平均来看,
push_back
vector
既然我们知道了
vector
vector
优化技巧:
预留空间 (Reserve): 如果你大概知道
vector
reserve()
std::vector<int> data;
data.reserve(1000); // 提前为1000个元素预留空间
for (int i = 0; i < 1000; ++i) {
data.push_back(i); // 这里就不会发生重新分配了
}避免在循环中插入/删除中部元素:
insert()
erase()
vector
使用 emplace_back
push_back
push_back
vector
emplace_back
vector
#include <vector>
#include <string>
#include <iostream>
struct MyObject {
int id;
std::string name;
MyObject(int i, const std::string& n) : id(i), name(n) {
std::cout << "MyObject 构造: " << id << std::endl;
}
MyObject(const MyObject& other) : id(other.id), name(other.name) {
std::cout << "MyObject 拷贝构造: " << id << std::endl;
}
MyObject(MyObject&& other) noexcept : id(other.id), name(std::move(other.name)) {
std::cout << "MyObject 移动构造: " << id << std::endl;
}
};
int main() {
std::vector<MyObject> objects;
objects.reserve(2); // 预留空间,避免扩容时的拷贝/移动
std::cout << "--- push_back ---" << std::endl;
objects.push_back(MyObject(1, "Alice")); // 可能触发拷贝构造
std::cout << "--- emplace_back ---" << std::endl;
objects.emplace_back(2, "Bob"); // 直接构造
return 0;
}你会发现
emplace_back
push_back
shrink_to_fit()
vector
capacity
size
shrink_to_fit()
vector
这些优化手段,说到底都是围绕着减少不必要的内存重新分配和数据拷贝展开的。
std::vector
[]
at()
push_back()
pop_back()
所以,它非常适合那些需要:
然而,
vector
vector
std::list
std::list
std::deque
以上就是vector容器如何使用 动态数组操作与内存管理的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号