【问题标题】:Fill dynamic array using curly bracket notation C++ [duplicate]使用大括号符号C ++填充动态数组[重复]
【发布时间】:2013-01-24 15:11:52
【问题描述】:

c++ 中有没有办法填充这样分配的数组

int **a = new int[4][2];

这样在一行中填充值

int a [4][2] = {{2,3,4},{5,6,7}};

【问题讨论】:

  • 您的第一行无效。
  • 这个问题被问了很多很多次,答案仍然是“否”(或for (i = 2; i < 8; i++)...)
  • @H2CO3 链接到类似问题?
  • @djechlin Just the first Google hit,不过还有更好的骗子(留给你作为练习)
  • @djechlin 这是一个不同的问题,不是重复的

标签: c++ c arrays c++11 initialization


【解决方案1】:

您可以在 C++11 中使用universal initialization notation

int(*a)[2] = new int[2][2]{{1,2},{3,4}};

【讨论】:

  • +1 因为我被 C++03 困住了。
【解决方案2】:

向量的向量可以工作,但仅限于 C++11。我想你必须为此放弃 C 兼容性

#include <vector>

int main()
{
   std::vector<std::vector<int>> v = {{2,3,4},{5,6,7}};   
}

【讨论】:

  • 使用支持初始化列表的 C++11 编译器。
  • @Aeluned,是的,所以 Clang、gcc、Intel now 或 MSVC 很快就会出现
  • @rhalbersma “或 MSVC 很快” - 你一定是在开玩笑。
  • @H2CO3 VC++ 2012 年 11 月 CTP 支持初始化列表,但标准库中尚不支持(即不适用于 std::vector),因此 RTM 版本将支持它。我猜这不会需要很长时间了。
【解决方案3】:

如果您的编译器有足够的 C++11 支持,则首选 std::array 而非 C 样式数组:

#include <array>

int main()
{
    std::array<std::array<int,3>,3> v = {1,2,3,4,5,6,7,8,9};
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-21
    • 1970-01-01
    • 2011-07-05
    • 2019-04-25
    • 2015-11-13
    相关资源
    最近更新 更多