【问题标题】:Difference initializing of a matrix [C++]矩阵的差分初始化 [C++]
【发布时间】:2017-10-15 21:29:03
【问题描述】:

我不明白这之间有什么区别:

std::vector< std::vector<bool> > matrix;

bool matrix[n][m];

我可以使用.size() 来查找它们的行和列吗?

谢谢。

【问题讨论】:

  • “我可以使用 .size() 来查找它们的行和列吗?” - 不能。至于列举差异,我不确定它是否过于宽泛。
  • 一个是容器,另一个是原始二维数组。
  • 它可能是一个原始的二维数组,也可能是一个可变长度的数组,而那些臭虫需要如此多的后端怪异,以至于你不能真正称它们为原始数组。
  • 使用简单二维数组的原因有很多,但如果提问者想了解.size(),这可能不是其中之一
  • 哇!忘了那个。另一个很大的区别是vector &lt;vector&lt;whatever&gt;&gt; 实际上是一个vector,包含更多vectors,每个都有自己的动态分配的存储池。可以想象,这种存储分散在整个内存中,而不是在数组的情况下分散在一个好的块中。

标签: c++ matrix vector boolean size


【解决方案1】:

有很大的不同:

std::vector&lt; std::vector&lt;bool&gt; &gt; matrix; - 定义一个 std::vector 类型的对象,该对象可能包含 bool-s 中的其他 std::vector

这使用标准库定义的容器。它有一个庞大的 API 以及您可以使用的多种方法。 matrix.size() 就是其中之一。

bool matrix[n][m]; - 定义 n 数组 m 布尔数组。

这里,matrix 本身不是对象,而是原始类型。您不能在这里使用matrix.size(),但您可以使用sizeof(matrix)/sizeof(matrix[0][0]) 来获取其中的布尔总数。

我的建议是尽可能使用标准库容器。

正如一些 cmets 正确建议的那样,您也可以使用 std::array 而不是原始数组,毕竟这就是它们的目的 :)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-05
    • 2015-08-11
    • 1970-01-01
    • 2021-03-22
    • 1970-01-01
    相关资源
    最近更新 更多