【问题标题】:Trouble appending to a vector C++无法附加到向量 C++
【发布时间】:2021-09-22 04:28:39
【问题描述】:

我在附加到 C++ 中的向量时遇到了一些麻烦/错误。我的代码是:

std::vector<int> maps(const std::vector<int> & values) {
  
  for(int i = 0; i < std::vector.size(); i++){
    values.pushback(maps[i] * 2);
  }
  return values;
}

我的目标是创建一个包含一些数字的基本列表,然后创建一个包含这些数字加倍的新列表。

我遇到了一个错误,很遗憾,它太长了,无法在此处复制。但我会给你详细信息:

Exit Code: 254
STDERR

Stack dump:
0.  Program arguments: /usr/lib/llvm-8/bin/clang -cc1 -triple x86_64-pc-linux-gnu -emit-obj -disable-free -disable-llvm-verifier -discard-value-names -main-file-(this is where it gets a bit long)

完整的代码是(我猜,因为这是一个谜题)

#include <vector>

std::vector<int> maps(const std::vector<int> & values){
  for(int i = 0; i < std::vector.size(); i++){
    values.push_back(maps[i] * 2);
  }
  return values;
}
int main(){
  return 0;
}

【问题讨论】:

  • for(int i = 0; i &lt; std::vector.size(); i++){ -> for(int i = 0; i &lt; maps.size(); i++){ 混淆了一个名为 maps 的函数以及某个地方的变量。至少我认为你是这样。具有更多上下文的minimal reproducible example 将有助于缩小范围。无论如何std::vector.size() 是不正确的。
  • pushback 不存在。你的意思是push_back?也没有maps变量,只有values
  • 很抱歉浪费了您的时间,我正在努力学习向量,所以对我来说有点难。感谢您的帮助@RetiredNinja
  • 您发布的代码的错误消息并不长:godbolt.org/z/ePT4c8Pbx。虽然我不确定这是否是您正在谈论的错误消息。请务必在问题中包含minimal reproducible example 和错误消息
  • 如果你想创建一个新列表,你不应该将值推送到作为函数参数获得的列表中,不是吗?更不用说你不能这样做,因为valuesconst(你不能修改它)。我认为您可以使用good C++ book 来学习 C++ 的基础知识。编程谜题很有趣,但你不能从中学习 C++。

标签: c++ arrays dictionary vector


【解决方案1】:

根据您的问题。这就是你想要的。

std::vector<int> maps_double(const std::vector<int> & values) {
   std::vector<int> doubles;
   for(int i = 0; i < values.size(); i++){
      doubles.push_back(values[i] * 2);
     }
   return doubles;
}

但在您的代码中,您做错了几件事。

for(int i = 0; i < std::vector.size(); i++)

您正在调用 std::vector 上的size()?没门。你需要有一个对象来调用它的大小。可能你想这样调用:

for(int i = 0; i < values.size(); i++)

然后你正在这样做:

values.pushback(maps[i] * 2);

您正在声明maps 函数。然后您使用下标访问i 索引。这是错误的。您正在将值推送到values,但您需要一个新向量。

【讨论】:

    【解决方案2】:

    添加到 foragerDev 所做的只是更正您的语法,

    for(int i = 0; i < values.size(); i++){
          doubles.push_back(values[i] * 2);
         }
    

    真的应该使用:

    for (const v : values)
        doubles.push_back (v*2);
    

    当您真的想遍历集合中的所有元素时,不要使用老式的计数循环 - 有一种更直接的方法。

    但您的函数(由 foragerDev 重写)只是一个标准算法:transform(或 ranges::transform,如果您有 C++20)。

    【讨论】:

    • 是的,我试着让它在初学者水平上更容易理解。但是您的建议更具可读性、更简单,并且可以利用现代 C++ 功能。
    猜你喜欢
    • 2013-03-26
    • 1970-01-01
    • 2019-03-13
    • 2014-07-22
    • 2018-10-02
    • 2020-10-25
    • 1970-01-01
    • 2013-08-11
    • 1970-01-01
    相关资源
    最近更新 更多