在使用 C++ std::vector 存储大量数据(例如百万级以上)时,频繁调用 push_back 会导致多次内存重新分配和元素拷贝/移动,影响性能。
我希望了解在以下场景中,有哪些工程上可靠的方法可以最小化这种开销。
运行环境:编译器:GCC 11.4 / Clang 15
C++ 标准:C++17 或 C++20
操作系统:Ubuntu 22.04
硬件:普通开发机(16GB 内存)
#include <vector>
#include <chrono>
#include <iostream>
struct MyData {
std::vector<int> data;
MyData() { data.resize(100); }
// 拷贝开销较大
};
int main() {
std::vector<MyData> vec;
auto start = std::chrono::steady_clock::now();
for (int i = 0; i < 1000000; ++i) {
vec.push_back(MyData()); // 频繁 push_back
}
auto end = std::chrono::steady_clock::now();
std::cout << "Cost: "
<< std::chrono::duration_cast<std::chrono::milliseconds>(end - start).count()
<< "ms\n";
return 0;
}希望回答能给出具体的代码对比示例和性能测试结论。