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

指定初始大小的std::vector中std::find的行为疑问

std::vector构造、size与std::find行为差异解析

两种vector构造方式的核心区别

  • std::vector<int> map_rows;:默认构造出来的是空容器,size()返回0,容器内没有任何元素。
  • std::vector<int> map_rows(10);:这是填充构造逻辑,会直接创建10个值初始化的元素。对于int这类内置类型,值初始化就是把元素设为0,所以容器里有10个0,size()返回10。

std::find的行为逻辑

  • 空容器无元素可遍历,std::find会直接返回end()迭代器。如果你的代码里把find返回end()的情况统一处理为返回-1,就会出现所有查找都返回-1的结果。
  • 包含10个0的vector中,第一个元素就是匹配项,std::find会立刻定位到索引0的元素,返回对应迭代器,所以你看到返回索引0。

reserve方法的实际作用

reserve(n)仅为vector预分配能容纳n个元素的内存空间,它不会改变容器的size,也不会创建任何元素。所以调用reserve后,容器仍为空(size()=0),std::find的行为和默认构造的空容器完全一致。

如果要适配大数据量同时不想提前创建元素(避免不必要的初始化开销),用reserve是正确选择;只有当你需要容器一开始就有指定数量的元素时,才适合用填充构造的方式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 11:26:03