0
아래의 코드에서 항목을 찾으면 for_each에 알리고 싶습니다. 어떻게 그럴 수 있죠?이 경우 for_each에 true 또는 false를 반환하는 방법은 무엇입니까?
#include <list>
#include <algorithm>
#include <functional>
using namespace std;
class widget {
public:
widget(int id) : m_id(id) {}
private:
int m_id;
};
class findwidget {
public:
findwidget(widget* p) : m_widget(p) {}
bool operator()(widget* p) const {
return p == m_widget ? true : false;
}
widget* m_widget;
};
list<widget*> m_widgetList;
void push_back(widget* pi){
if(m_widgetList.empty()) {
m_widgetList.push_back(pi);
} else {
if(!std::for_each(m_widgetList.begin(), m_widgetList.end(), findwidget(pi)))
m_widgetList.push_back(pi);
}
}
int main(int argc, char* argv[])
{
widget w1(1);
push_back(&w1);
return 0;
}
'std :: set'에 +1 (C++ 0x에서도'std :: unordered_set'을 고려할 것입니다. 왜냐하면 주문은 가져 오지 않는 것 같기 때문입니다). 데이터 구조의 적절한 선택은 근본적이며,'std :: list'의 사용은 대개 의심 스럽습니다 (단순히 사람들이 목록을 알고있는 것처럼 보이기 때문에 ...). –