C ++:构造一个std :: vector <std :: vector <int>&gt;用二维C数组?</std :: vector <int>

时间:2012-04-27 01:27:39

标签: c++ stdvector arrays

可以使用C-array构建std :: vector,如下所示: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];
    }
}

2 个答案:

答案 0 :(得分: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);

答案 1 :(得分:4)

你为什么要这样做?你有一个连续的内存块,你正在把它变成多块内存。我建议你提供一个matrix类来封装大小std::vector<int>的单个18*25的内容,并为访问的元素提供访问器(operator()( int, int ))。 col + row*columns ...

运算符重载的C++ FAQ lite条目中的更多内容。