You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++中vector预分配容量赋值与push_back插入,哪种效率更高?

两种C++ vector元素插入方法的速度对比及优化建议

速度对比

  • 方式1更快:初始化vector时就一次性分配了能容纳n个元素的连续内存,后续直接通过下标赋值,全程没有内存扩容和元素拷贝/移动的额外开销。
  • 方式2性能劣势:默认情况下vector初始容量很小,每次push_back如果当前容量不足,会触发扩容操作——通常是将现有容量翻倍,然后把旧内存中的元素拷贝或移动到新内存里。n越大,扩容次数越多,额外的性能损耗就越明显。

更优实现方案

优化版push_back写法

如果偏好push_back的写法,可提前调用reserve(n)预分配足够容量,消除扩容开销,性能能追平方式1:

int n;
cin>>n;
vector<int> v;
v.reserve(n); // 预分配n个元素的空间
for(int i = 0;i<n;i++){
  int x;
  cin>>x;
  v.push_back(x);
}

标准库批量读取写法

利用istream_iterator和copy_n实现批量读取,代码更简洁且性能优异:

#include <iterator>
#include <vector>
#include <iostream>

int main() {
    int n;
    cin >> n;
    vector<int> v;
    v.reserve(n);
    std::copy_n(std::istream_iterator<int>(cin), n, std::back_inserter(v));
    return 0;
}

输入速度优化(通用技巧)

如果输入操作是整体性能的瓶颈,可关闭cin与C标准IO的同步,大幅提升读取速度:

std::ios::sync_with_stdio(false);
std::cin.tie(nullptr);

这行代码对所有基于cin的读取方式都有效,能显著降低输入耗时。

内容的提问来源于stack exchange,提问作者Abdullah Ahmed

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 01:57:40