如何在 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++ - 如何使用构造函数中的'this'初始化其他类中的引用