3

std::vector は、 so: のような C 配列を使用して構築できますstd::vector<int> vec(ary, ary + len)。を構築する適切な方法は何std::vector<std::vector<int> >ですか?

各要素を手動でベクトルにコピーすることで、問題をブルートフォースしてきましたが、明らかにこれは意図ではありませんが、機能します。

int map[25][18] = { /*...DATA GOES HERE...*/ }
std::vector<std::vector<int> > m(18, std::vector<int>(25, 0));
for(int y = 0; y < 18; ++y) {
    for(int x = 0; x < 25; ++x) {
        m[y][x] = map[y][x];
    }
}
4

2 に答える 2

6
int map[18][25] = { /*...DATA GOES HERE...*/ };
std::vector<std::vector<int> > m;
m.reserve(18);
for (std::size_t i = 0; i != 18; ++i)
    m.push_back(std::vector<int>(map[i], map[i] + 25));

C++11 では、必要に応じて最後の行を次のように置き換えて、少しノイズを取り除くことができます。

    m.emplace_back(map[i], map[i] + 25);
于 2012-04-27T01:32:51.233 に答える
3

なぜそれをしたいのですか?連続したメモリ ブロックがあり、それを複数のメモリ ブロックに変換しています。matrix単一std::vector<int>のサイズの内容をカプセル化し、アクセスする要素に18*25アクセサ ( ) を提供するクラスを提供するのではなく、...operator()( int, int )col + row*columns

演算子のオーバーロードに関する C++ FAQ liteエントリの詳細。

于 2012-04-27T01:50:49.360 に答える