如何在 C++ 中使用构造函数初始化二维向量?

Posted

技术标签:

【中文标题】如何在 C++ 中使用构造函数初始化二维向量?【英文标题】:How to initialize 2d vector using constructor in c++? 【发布时间】:2014-02-13 15:14:13 【问题描述】:

我知道如何像这样初始化一维向量

int myints[] = 16,2,77,29;
std::vector<int> fifth(myints, myints + sizeof(myints) / sizeof(int));

假设我有二维数据。

float yy[][2] = 20.0, 20.0, 80.0, 80.0, 20.0, 80.0, 80.0, 20.0;

如何初始化二维向量?

【问题讨论】:

记住向量在内存中是连续的 @Jarod42 您不应该在问题中编辑 OP 的代码。 @herohuyongtao:float yy = .. 无效。而且我的编辑不会使发布的答案无效。 @Jarod42:我认为它无效是问题的一部分。 @LightnessRacesinOrbit:我可以恢复到以前的代码吗? 【参考方案1】:

在当前的 C++(自 2011 年起)中,您可以在构造函数中初始化此类向量:

vector<vector<float>> yy

    20.0, 20.0,
    80.0, 80.0,
    20.0, 80.0,
    80.0, 20.0
;

活着看:http://ideone.com/GJQ5IU。

【讨论】:

@sefat:你需要 C++11(-std=c++11 在 gcc 编译器标志中)。 @Jarod42:谢谢你。我已经为 c++11 配置了代码块,现在它可以工作了。【参考方案2】:

在 C++ 11 中,您可以像这样初始化一个向量:

auto yy = std::vector<std::vector<float>>

    20.0, 20.0,
    80.0, 80.0,
    20.0, 80.0,
    80.0, 20.0
;

【讨论】:

要了解更多信息的内容包括 initializer_lists 和 c++11 中的统一初始化。 @juanchopanza 在这种情况下同样有效。我个人的偏好是“几乎总是自动”。在这种情况下,它几乎没有什么区别,因为我们致力于类型 std::vector<:vector>>,并且我们没有节省任何打字。这里只是风格问题。理想情况下,它的作用是告知程序员不要将 yy 视为向量的向量,而应将其视为任何 2D 容器,尽管可能需要为 yy 取一个更好的名称来说明这一点。 这真的毫无意义。因为 RHS 上的东西明确地是向量的向量。此外,这要求复制构造函数是可访问的。在这种情况下,它可以工作,但并非总是如此。这是一个额外的限制,收益甚微。 它不要求复制构造函数是可访问的,它要求复制构造函数或移动构造函数是可访问的,是的,这是一个限制,但在这种情况下,该限制也是由使用 std::vector 要求对象是可复制或可移动的,因此在这种情况下除了样式之外没有真正的区别。【参考方案3】:

如果您事先不知道这些值,您仍然可以使用初始值初始化二维向量。

vector< vector <int> > arr(10, vector <int> (10, 0));

上面的代码将初始化一个 10X10 的二维向量,所有索引值为零(0)。

【讨论】:

以上是关于如何在 C++ 中使用构造函数初始化二维向量?的主要内容,如果未能解决你的问题,请参考以下文章

运行时在构造函数中初始化向量类成员——C++

如何验证 C++ 构造函数中的输入参数?

c++ - 如何使用构造函数中的'this'初始化其他类中的引用

用向量 c++ 中的指针成员初始化对象

如何将双精度向量传递给构造函数,然后在子类中访问其数据(在 C++ 中)?

引用二维向量中的元素 (c++)