2016-10-10 84 views
0
​​

这里2d_vector是n * 3向量,其中n表示它的元素,例如, 2d_vector = {{0,0,2},{0,0,1},{0,0,0},{0,0,-1}}通过判断该向量的元素来擦除2d向量C++的一个向量

我试图擦除这个2d_vector的元素符合“2d_vector [i] [2] == -1”,其中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

* n表示的总数此2d_vector的元素。 –

+2

当然你的代码不能编译。 '2d_vector'不是标识符的有效名称。改用'vector_2d'。 –

+0

需要[MCve]。 – Yakk

回答

0

我们来分解一下**(it+2)it+2指的是it所引用的那个之后的第二个vector*(it+2)取消引用迭代器,并在it引用的引用之后获得第二个vector。这是一个vector,不是指针或迭代器。它不能被解除引用,所以**(it+2)注定要失败。但是,(*(it+2))[0]应该做你看起来想要的。

这个假设it+2在范围之内。

+0

我试过这种方式,程序从for循环中止。 –

+0

何处以及为何中止?如果你不知道,你的开发环境的调试器可能会有所帮助。 – user4581301

+0

它从for循环中的擦除()操作中的一个中止。 –

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”,

+0

我试过这种方式,但程序从for循环中止。 –

+0

哪里?怎么样?编辑你的答案,我不明白为什么 – Treycos

+0

我想我找到了,试试这个 – Treycos