您好,非常感謝提前!重載函數在struct中調用operator()/參數發生了什麼?
我使用std::unique
到erase
從std::vector
。爲了檢查唯一性,我調用了一個結構的布爾函數。因爲我想使用預定義的容差,我嘗試添加一個構造函數,以傳遞所需的值。它有效,但我不知道爲什麼。
std::vector<std::pair<int,double> > myVec;
struct Check{
double tol_ = 0.0;
Check(double tol) : tol_(tol)
{
}
bool operator()(const std::pair<int,double> &a,
const std::pair<int,double> &b)
{
return fabs(a.second-b.second) < tol_;
}
};
// fill vector
...
// remove duplicates
myVec.erase(std::unique(myVec.begin(), myVec.end(), Check(0.1)), myVec.end());
這是否在某種程度上是合理的做法?我有點困惑於unique
。達到此功能時,使用公差構造結構Check
。 Next unique
再次調用這個結構來通過傳遞它們作爲參考來比較向量元素?
感謝您的努力!
你爲什麼這樣做'myVec->'開頭的(),而不是'myVec.begin()'? – PRP
首先['std :: unique'](http://en.cppreference.com/w/cpp/algorithm/unique)刪除重複*連續*元素。這意味着你的範圍必須被分類。其次,'myVec'似乎不是一個指針,使用箭頭成員訪問操作符是錯誤的。最後,*如何*它不起作用?你能否詳細說明一下? –
你有任何問題嗎?我的意思是我只能回答「是」。這是合理的做法,並以此方式完成。所以你是對的這是如何工作的。 – Hayt