【发布时间】:2014-09-03 16:37:07
【问题描述】:
vector<int>grid = { 0, 1, 1, 2, 2, 2, 2, 2, 2, 1, 1, 1, 3, 3, 3, 2, 2, 4, 1, 5, 3, 3, 6, 2, 6, 4, 5, 5, 5, 3, 6, 2, 6, 4, 4, 5, 5, 5, 6, 6, 6, 4, 7, 7, 8, 5, 8, 8, 8, 4, 7, 7, 8, 8, 8, 8, 8, 4, 7, 7, 7, 7, 8, 8, 8 };
const size_t gridSize = end(grid) - begin(grid);
int maxColour = *max_element(begin(grid), end(grid));
vector<vector<int>> colourPos(maxColour+1);
for (size_t i = 1; i < gridSize; ++i)
colourPos[grid[i]].push_back(i);
for (size_t i = 0; i < colourPos.size(); ++i) {
std::cout << (i + 1) << ": ";
for (int p : colourPos[i])
std::cout << p << ' ';
std::cout << std::endl;
}
如何在colourPos[1][0] 处插入一个元素,以便它移动所有元素以及colourPos 向量中的其他向量?
例如[2][0]、[3][0]。
我试过了
colourPos[1][0].insert(0);
刚刚得到“表达式必须具有类类型”
【问题讨论】:
-
博士; TL;这是
std::vector::insert的简单外观 -
@40two 我试过了,不明白如何正确使用。
-
插入
std::vector(例如v)的开头只是v.insert(v.begin(), val); -
您需要一个循环来执行此操作。
for(int i(0); i < colourPos.size(); ++i) {colourPos[i].insert(colourPos[i].begin(), 0); } -
@mrmike 啊,我明白了。我看错了。在这种情况下,使用 Mike Seymour 的答案就可以了,只需将他的
1替换为循环迭代变量即可。