【发布时间】:2016-01-26 14:13:41
【问题描述】:
我有一个整数对向量。假设 Itr 作为这个向量的迭代器。
我想遍历向量并决定是否从向量中删除元素。如果向量的元素是9001,3,那么我想从向量中删除所有itr->first 为9001 的元素(不管itr->second 是什么)。
问题:
- 如何删除这个整数对向量。以下方法不起作用:
vec.erase(std::remove(vec.begin(), vec.end(), Itr->first=9001), vec.end()); - 我可以不给 vec.begin() 给 vec.end() 的范围
vec.begin 为
(current element being pointer by vector) - 10和 ve.end 为(current element being pointed by vector)+10?
例如:vec.erase(std::remove(Itr-10, Itr+10, Itr->first=9001), vec.end());
如果向量大小本身小于10,Itr+10 ot Itr-10 可能会导致分段错误。那么如何处理这种情况呢?
vector<pair<int,int> > vec;
vec.push_back(pair<int,int>(9001,1));
vec.push_back(pair<int,int>(9001,2));
vec.push_back(pair<int,int>(9001,3));
vec.push_back(pair<int,int>(9001,4));
vec.push_back(pair<int,int>(9002,1));
vec.push_back(pair<int,int>(9002,2));
vec.push_back(pair<int,int>(9002,3));
vec.push_back(pair<int,int>(9002,4));
vec.push_back(pair<int,int>(9002,5));
vector<pair<int,int> >::iterator Itr;
for(Itr=vec.begin();Itr!=vec.end();++Itr)
cout<<vecItr->first<<" "<<vecItr->second;
// vec.erase(std::remove(Itr-10, Itr+10, Itr->first=9001), vec.end()); //This doest work
for(Itr=vec.begin();Itr!=vec.end();++Itr)
cout<<Itr->first<<" "<<Itr->second;
【问题讨论】:
-
如何使用
std::remove_if和适当的 lambda?