0

我刚刚发现这段代码确实有效。我想知道为什么。row 和 col 都是变量。我试图动态分配一个二维向量。有人可以解释一下吗?谢谢!

row 和 col 都是“int”

grid_ = new vector<vector<bool> > (row, col);  
4

2 回答 2

3

有几个两个参数的构造std::vector函数。您尚未提供 and 的类型rowcol但我怀疑您的代码不会达到您的预期。如果要在二维中初始化向量,则需要构造函数,该构造函数采用大小和值来初始化每个元素。在这种情况下,该值本身就是一个向量。

int row = 5;
std::vector<bool> col(5, false);
grid_ = std::vector<std::vector<bool>>(row, col);

这将初始化一个 5x5 的布尔值网格,全部设置为false.

于 2013-02-08T19:28:42.170 回答
0

给定原始代码

grid_ = new vector<vector<bool> > (row, col);  

其中“rowcol”都是“int”,这是它的问题所在:

  • 使用的vector构造函数创建一个row元素向量,初始化为该col值。这是有意的可能性几乎为零。

  • 向量是动态分配的,这几乎不需要:vector是一个可调整大小的容器。

  • 它使用vector<bool>,由于其不切实际的专业化(每个bool都可以存储为单个位,这意味着您无法获得对它的引用),通常会避免使用它。

相反,布尔值矩阵的一个很好的解决方案是使用单个向量,其中包含例如枚举类型的元素,并计算索引。


更新:检查一下,代码甚至没有编译,即Q 中给出的信息不正确

#include <vector>
using namespace std;

int main()
{
    int row = 0;
    int col = 0;
    auto x = new vector<vector<bool> > (row, col);
}
[D:\开发\测试]
> g++ foo.cpp
在 d:\bin\mingw\bin\../lib/gcc/i686-pc-mingw32/4.7.2/../../../../include/c++/4.7.2/ 中包含的文件中矢量:65:0,
                 从 foo.cpp:1:
d:\bin\mingw\bin\../lib/gcc/i686-pc-mingw32/4.7.2/../../../../include/c++/4.7.2/bits/stl_vector。 h:在 'void std::vector::_M_initialize_dispatch(_Integer, _Integer, std::__true_type) 的实例化中 [with _Integer = int; _Tp = std::vector; _Alloc = std::allocat
或 >]':
d:\bin\mingw\bin\../lib/gcc/i686-pc-mingw32/4.7.2/../../../../include/c++/4.7.2/bits/stl_vector。 h:393:4: 来自 'std::vector::vector(_InputIterator, _InputIterator, const allocator_type&) [with _InputIterator = int; _Tp = std::vector; _Alloc = std::all
ocator >; std::vector::allocator_type = std::allocator >]'
foo.cpp:8:49: 从这里需要
d:\bin\mingw\bin\../lib/gcc/i686-pc-mingw32/4.7.2/../../../../include/c++/4.7.2/bits/stl_vector。 h:1137:4:错误:ca 没有匹配功能
ll 到 'std::vector >::_M_fill_initialize(std::vector >::size_type, int&)'
d:\bin\mingw\bin\../lib/gcc/i686-pc-mingw32/4.7.2/../../../../include/c++/4.7.2/bits/stl_vector。 h:1137:4: 注意:候选人是:
d:\bin\mingw\bin\../lib/gcc/i686-pc-mingw32/4.7.2/../../../../include/c++/4.7.2/bits/stl_vector。 h:1179:7: 注意: void std::vector::_M_fill_initialize(std::vector::size_type, const value_type&) [with _Tp = std::vector; _Alloc = std::allocator >; std::vector::size_type = unsigned int; std::vector::value_type = std::vector]
d:\bin\mingw\bin\../lib/gcc/i686-pc-mingw32/4.7.2/../../../../include/c++/4.7.2/bits/stl_vector。 h:1179:7:注意:没有已知的 ar 转换
从'int'到'const value_type& {aka const std::vector&}'的gument 2

[D:\开发\测试]
> _
于 2013-02-08T19:32:52.080 回答