【问题标题】:C++ Syntax: Add new vector to a listC++ 语法:将新向量添加到列表中
【发布时间】:2014-01-11 10:37:59
【问题描述】:

好的,所以这有点复杂,我的语法记忆很糟糕......

我有一个列表,其中包含名为“Plane”的对象向量。

这里:

std::list<std::vector<Plane>> possible_planes;

Plane 是我制作的一个类。 我现在要做的是向其中添加新条目。 所以是这样的:

possible_planes.push_back(std::vector<Plane> new Plane(boundRect[i].area(), center[i]));

这是我未能正确使用语法的地方。正确的语法是什么样的?

【问题讨论】:

  • 你确定这里需要二维容器吗?您的代码和变量名称另有说明。也就是说,possible_planes 包含向量,所以向它添加一个向量。然后将平面添加到 vector(而不是添加到向量的 list)。
  • 这不是声明该变量的地方,new 这个词也不应该出现在这段代码的任何地方。
  • 是的,我需要一个 2D 容器。我认为我的变量表明必须有多个列表条目-> 平面。有很多同类型的飞机。这就是为什么存在一个向量来保存属于一起的向量。

标签: c++ syntax-error


【解决方案1】:

您的代码在表达式中间声明了一个变量,并在不应该的时候动态分配。试试这个:

possible_planes.push_back(std::vector<Plane>());
possible_planes.back().push_back(Plane(boundRect[i].area(), center[i]));

注意,如果我知道您使用的是符合 C++11 标准的工具链,这可能会进一步减少。

【讨论】:

  • 这似乎是对的,谢谢。我以为我必须使用 new 但显然构造函数 (?) 已经为我这样做了?
  • @user2175762 new operator 在堆上分配新内存并返回指向该位置的指针。构造函数只是在堆栈上分配内存。让编译器为您完成工作。
  • 嗯,但在编译时我不知道我将拥有多少个实例。这就是我选择新运营商的原因..
  • @user2175762 向量将为您处理平面的分配,就像您向其推送新向量时列表所做的那样。这两条线在幕后发生了很多
  • 谢谢,是的,还有很多事情要做。问题是我认为我需要知道列表分配的大小,这就是我尝试使用我的参数创建列表条目的原因。但现在我认为它只包含某种指针,所以这个向量实际上有多大并不重要。我说的对吗?
【解决方案2】:

1.先新建向量,再添加平面

  possible_planes.push_back(std::vector<Plane>());
  possible_planes.back().push_back(Plane(boundRect[i].area(), center[i]));

2。有这样的功能

  std::vector<Plane> createNewPlaneVector(Plane& plane) {
    std::vector<Plane> result;
    result.push_back(plane);
    return result;
  }

然后你可以在一行中添加新的向量

  possible_planes.push_back(createNewPlaneVector(Plane(boundRect[i].area(), center[i])));

如果您使用的是 C++11,那么这会变得更简单:

possible_planes.push_back(std::vector<Plane>() { Plane(boundRect[i].area(), center[i]) } );

【讨论】:

    【解决方案3】:

    也许可以尝试使用多行和变量来做,像这样:

    vector<Plane> newPlane; // Vector you add to list later
    Plane myPlane; // Your object
    // Do what you want with your Plane object
    newPlane.push_back(myPlane); // Insert your object to vector
    possible_planes.push_back(newPlane); // Insert vector to list
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-02-20
      • 2014-07-06
      • 2013-05-30
      • 1970-01-01
      • 2018-04-06
      • 2020-02-07
      • 2020-07-28
      • 1970-01-01
      相关资源
      最近更新 更多