通过判断该向量的元素来擦除2d向量c ++的一个向量

时间:2016-10-10 18:00:40

标签: c++ vector

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); 
        }
    }

但它不起作用。 我应该怎么做? 提前谢谢。

2 个答案:

答案 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”的元素,