このコードが実際に機能することがわかりました。なぜだろう。行と列は両方とも変数です。2D ベクトルを動的に割り当てようとしていました。誰かがこれを説明できますか?ありがとう!
行と列は両方とも「int」です
grid_ = new vector<vector<bool> > (row, col);
このコードが実際に機能することがわかりました。なぜだろう。行と列は両方とも変数です。2D ベクトルを動的に割り当てようとしていました。誰かがこれを説明できますか?ありがとう!
行と列は両方とも「int」です
grid_ = new vector<vector<bool> > (row, col);
には、引数が 2 つのコンストラクターがいくつかありますstd::vector
。あなたはrow
との型を提供していませんが、col
あなたのコードは期待どおりに動作しないのではないかと思います。ベクトルを 2 次元で初期化する場合は、各要素を初期化するためのサイズと値を受け取るコンストラクターが必要です。この場合、その値自体がベクトルです。
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
が 1 つのビットとして格納される可能性があるため、参照を取得できないことを意味します) のため、一般的に回避されます。
代わりに、ブール値の行列の適切な解決策は、列挙型などの要素を持つ単一のベクトルを使用し、インデックスを計算することです。
更新: チェックすると、コードはコンパイルさえしません。つまり、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 オケータ >; 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 to '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::アロケータ >; 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& {別名 const std::vector&}' への Gument 2 [D:\開発\テスト] > _