[英]Finding and deleting an element from a vector of pointers?
vector<unsigned int> x;
vector<unsigned int>::iterator itr;
unsigned int varF;
...
....
// find and delete an element from a vector.
itr = std::find(x.begin(), x.end(), varF); // <algorithm>
if (itr != x.end())
x.erase(itr);
//or
x.erase(std::remove(x.begin(), x.end(), varF), x.end());
我想將此向量轉換為指針向量
vector<unsigned int*> x;
如何將上述功能轉換為指針向量?
使用find_if
代替find
,或使用remove_if
代替remove
,以使用自定義謂詞:
struct FindIntFromPointer
{
FindIntFromPointer(int i) : n(i) { }
bool operator()(int * p) const { return n == *p; }
private:
int n;
};
std::find_if(x.begin(), x.end(), FindIntFromPointer(varF));
x.erase(std::remove_if(x.begin(), x.end(), FindIntFromPointer(varF)), x.end());
如果您具有C ++ 11,則可以使用lambda代替顯式謂詞:
std::find_if(x.begin(), x.end(), [varF](int * p) -> bool { return varF == *p; });
如果要在需要取消引用和比較的其他類似情況下重用謂詞,則可以將該謂詞轉換為模板。 在這種情況下,模板比每次鍵入lambda更優雅。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.