0

このコードが実際に機能することがわかりました。なぜだろう。行と列は両方とも変数です。2D ベクトルを動的に割り当てようとしていました。誰かがこれを説明できますか?ありがとう!

行と列は両方とも「int」です

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

2 に答える 2

3

には、引数が 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ます。

于 2013-02-08T19:28:42.170 に答える
0

元のコードを考えると

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

ここで、"rowcolは両方とも "int"" です。ここで何が問題なのかを説明します。

  • 使用されるコンストラクターは、値に初期化された要素vectorのベクトルを作成します。これが意図されている可能性はゼロに近いです。rowcol

  • ベクターは動的に割り当てられますが、これはほとんど必要ありません: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:\開発\テスト]
> _
于 2013-02-08T19:32:52.080 に答える