3

可以使用 C 数组构造 std::vector,如下所示:std::vector<int> vec(ary, ary + len)。构造 a 的正确方法是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 回答