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

C++实现vector元素翻倍时追加元素报错如何解决

错误成因
  • 模板使用错误:std::vector.size()是非法写法,std::vector是模板类型名,不是具体的vector实例,无法直接调用size()方法,需要获取传入参数values的长度,应该调用values.size()。
  • const引用违规修改:参数values是const std::vector<int>&类型,属于只读常量引用,不能调用会修改自身的push_back方法,属于语法层面的编译错误。
  • 标识符误用:maps[i]写法错误,maps是当前函数的函数名,不是vector实例,要读取原数组的元素应该写values[i]。
  • 逻辑错误:需求是生成新的翻倍列表,但现有逻辑是往原vector尾部追加元素,就算前面的问题修复,也会出现循环条件i < values.size()永远为真的死循环——因为每次push_back都会让values的长度加1,i永远无法追上递增的size。
修复方案

实现逻辑调整为:创建独立的新vector存储翻倍后的结果,遍历原vector的元素做翻倍计算后存入新vector,最后返回新vector即可。
修复后完整代码如下:

#include <vector>

std::vector<int> maps(const std::vector<int> & values){
  // 新建空vector存储结果
  std::vector<int> res;
  // 预分配空间提升性能,可选
  res.reserve(values.size());
  for(int i = 0; i < values.size(); i++){
    res.push_back(values[i] * 2);
  }
  return res;
}
int main(){
  return 0;
}

也可以用范围for简化写法:

std::vector<int> maps(const std::vector<int> & values){
  std::vector<int> res;
  res.reserve(values.size());
  for (auto v : values) {
    res.push_back(v * 2);
  }
  return res;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.12 01:27:03