vector< vector<int> > 2d_vector;
这里2d_vector是一个n * 3向量,其中n表示它的元素,例如 2d_vector = {{0,0,2},{0,0,1},{0,0,0},{0,0,-1}}
我试图擦除符合&#34; 2d_vector [i] [2] == -1&#34;的这个2d_vector的元素,其中i从0到n。 我的代码如下:
vector< vector<int> >::iterator it = 2d_vector.begin();
for( ;it<2d_vector.end();it+=3){
if(**(it+2) == -1){
it = staticBlocks.erase(it);
}
}
但它不起作用。 我应该怎么做? 提前谢谢。
答案 0 :(得分:0)
让我们分解**(it+2)
。 it+2
指的是vector
引用的第二个it
。 *(it+2)
取消引用迭代器,并获得vector
引用的第二个it
。这是vector
,而不是指针或迭代器。它无法解除引用,因此**(it+2)
注定要失败。但是,(*(it+2))[0]
应该做你想要的。
这假设it+2
在范围内。
答案 1 :(得分:0)
你的意思是什么? :
std::vector<std::vector<int>> vec;
for (std::vector<std::vector<int>>::iterator it = vec.begin(); it != vec.end(); ++it) {
if (it->at(2) == -1){
vec.erase(it);
--it; // This may fix it, if a vector gets deleted, the rest of the list goes one step towards the beggining of it and the next vector will be skipped
}
}
适合这个
擦除这个2d_vector符合“2d_vector [i] [2] == -1”的元素,