Rag*_*u G -5 c++ memory iterator stl vector
这是编辑过的代码
Run Code Online (Sandbox Code Playgroud)vector<vector<int> > vec; vector<vector<int> >::iterator vit; vector<int>::iterator it; for ( vit = vec.begin(); vit != vec.end(); ++vit) { it = vit->begin(); while(it != vit->end()) { while(it != vit->end()) { if( condition ) { while( condition ) { //going back to certain it //erase an element it = vit->erase(it); } } else ++it; } ++it; } }
内在的同时循环回到某一点.链接丢失.擦除元素而不复制迭代器并且在后循环中没有内存泄漏并再次向前移动?
如果你想删除内部向量的某些元素,请在它们上使用erase-remove惯用法:
for (auto & intv : vec)
{
intv.erase(
std::remove_if( intv.begin(), intv.end(),
[](int value) -> bool { return value == 2; }),
intv.end() );
}
Run Code Online (Sandbox Code Playgroud)
笔记:
您可以vec
通过在lambda表达式中捕获它们来应用某些条件或其他局部变量.
此示例将从内部向量中删除所有等于的元素2
.
因为int
最好按值传递lambda参数.对于更大的对象,您可能希望拥有一个const引用lambda参数.