在下面的C++ STL程序中,我定義了一個函子Nth,如果它在第n次被撤銷,它將返回true。並且我將它轉換爲通用算法remove_if,奇怪。使用函子作爲謂詞的C++ STL程序
代碼:
#include <iostream>
#include <list>
#include <algorithm>
#include "print.hpp"
using namespace std;
class Nth{
private:
int nth,ncount;
public:
Nth(int n):nth(n),ncount(0){}
bool operator()(int)
{
return ++ncount == nth;
}
};
int main()
{
list<int> col;
for (int i = 1;i <=9 ;++i)
{
col.push_back(i);
}
PRINT_ELEMENTS(col,"col : ");
list<int>::iterator pos;
pos = remove_if(col.begin(),col.end(),
Nth(3));
col.erase(pos,col.end());
PRINT_ELEMENTS(col,"nth removed : ");
}
print.hpp:
#include <iostream>
template <class T>
inline void PRINT_ELEMENTS (const T& coll, const char* optcstr="")
{
typename T::const_iterator pos;
std::cout << optcstr;
for (pos=coll.begin(); pos!=coll.end(); ++pos) {
std::cout << *pos << ' ';
}
std::cout << std::endl;
}
我在Microsoft Visual Studio 2008中運行它,我得到的結果是: 它刪除元件(3)和6不是我想要的。我以爲只有3個會被刪除。 有人可以爲我解釋嗎?非常感謝。
更確切地說,OP希望實現的目標仍然是可能的。該狀態應該被外化並以可變參考的形式傳遞給謂詞。然後,給定謂詞的所有副本將共享與原始狀態相同的可變狀態。 – 2012-04-22 14:28:45