【问题标题】:How to use both std::vector and std::array at the same time?如何同时使用 std::vector 和 std::array ?
【发布时间】:2014-08-20 15:54:42
【问题描述】:

我正在使用这样的东西:

std::vector<std::array<double, 3>> myarray;

但是当我想向数组中添加新元素时,我尝试使用

myarray.push_back({0, 0 ,0});

它不能用 VS2012 编译。

那么如何使用 std::array 作为 std::vector 的元素呢?

谢谢。

【问题讨论】:

  • std::vector 没有pushback 成员。请贴出真实代码。
  • 您在push_back 中间缺少_。否则,一些更好的编译器会接受此代码。
  • -2?这个问题没有错。 OP 声明编译器并提交一个 sscce。问题归结为编译器伪装成 C++11 兼容但缺少许多功能。
  • @Bathsheba(我没有投票)这不是 sscce。它有一个错字,仍然缺少包含和功能。另外,AFAIK MSVC 是极少数不伪装成 C++11 编译器的编译器之一(__cplusplus 的值),我不知道你为什么称它为伪装。

标签: c++ visual-c++ c++11 stl


【解决方案1】:

恐怕你不走运:VS2012 不支持大括号初始化。

请注意,您的代码是有效的 C++11。

【讨论】:

  • 谢谢。但是如何在 VS2012 中将 std::array 类型的元素添加到 std::vectort
  • A std::array 与普通数组不同,可以复制为单个值。声明一个std::array 类型的局部变量并将其传递给push_back
【解决方案2】:

我确定 push_back 中缺少的 _ 是一个错字。

问题是VS2012。使用 VS2013 或支持 C++11 的编译器,或显式初始化新元素。

【讨论】:

    【解决方案3】:

    你必须走很长的路。

    std::array<double, 3> a; // Maybe you can use brace initialization here? Not sure
    a[0] = 1;
    a[1] = 5;
    a[2] = 0;
    myarray.push_back(a);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-05-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-17
      • 2013-09-27
      • 2011-05-24
      • 1970-01-01
      相关资源
      最近更新 更多