我刚刚发现这段代码确实有效。我想知道为什么。row 和 col 都是变量。我试图动态分配一个二维向量。有人可以解释一下吗?谢谢!
row 和 col 都是“int”
grid_ = new vector<vector<bool> > (row, col);
我刚刚发现这段代码确实有效。我想知道为什么。row 和 col 都是变量。我试图动态分配一个二维向量。有人可以解释一下吗?谢谢!
row 和 col 都是“int”
grid_ = new vector<vector<bool> > (row, col);
有几个两个参数的构造std::vector
函数。您尚未提供 and 的类型row
,col
但我怀疑您的代码不会达到您的预期。如果要在二维中初始化向量,则需要构造函数,该构造函数采用大小和值来初始化每个元素。在这种情况下,该值本身就是一个向量。
int row = 5;
std::vector<bool> col(5, false);
grid_ = std::vector<std::vector<bool>>(row, col);
这将初始化一个 5x5 的布尔值网格,全部设置为false
.
给定原始代码
grid_ = new vector<vector<bool> > (row, col);
其中“row
和col
”都是“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:\开发\测试] > _