可以使用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];
}
}
答案 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条目中的更多内容。