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
相关产品推荐
相关产品推荐

