在这种情况下,如何返回true或false给for_each
How to return true or false to for_each in this case?
在我的代码下面,我想通知for_each,如果我找到项目?怎么做呢?
#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::for_each
。使用以下任意选项(根据实际情况选择):
-
std::find
-
std::find_if
-
std::find_first_of
std::find
示例:
if(std::find(m_widgetList.begin(), m_widgetList.end(),pi) == m_widgetList.end())
m_widgetList.push_back(pi);
注意,如果使用std::find
,则不需要findWidget
函子。毕竟,您只是在比较地址(即指针)。
-
std::set
std::set
将自动处理重复的元素。也就是说,您可以这样做:
m_widgetSet.insert(pi);
则如果pi
不在集合中,则将其插入到集合中。如果它已经包含了它,insert
将不会把它插入到集合中。
相关文章:
- Arduino-C++ bool 不会从 false 变为 true
- 如何使用boost定义布尔类,可能的值应该是TRUE或FALSE?
- C++如果使用 lambda 表达式的语句返回 true,但输出来自 false,为什么
- MFC 的 OnInit() 函数中的返回 true 和返回 false 有什么区别
- std::is_array 当它应该返回 false 时返回 true
- 如果BOOL仅从false到true一次,我可以避免锁定布尔
- `如果constexpr(false)`始终评估为true
- 是否应在分配时将布尔值截断为 true 或 false
- 我想返回 True/False 关于值是否在一组值中
- 尝试将字符串变量转换为布尔值会导致 "true" 和 "false" 都等于 0
- C 程序,用于分级多个True或False测试
- false ||Mingw编译器v 6.3.0-1中的true给予0
- std::is_same<A,B>::value == 第 1 行为 true,第 2 行为 false
- true/false功能如果存在总和
- 查找n连续字符的函数返回true/false
- 在 c++ 中返回 true 或 false
- 我正在尝试创建一个函数,如果一个元素在向量中,则返回 true/false,但我收到错误
- 单元测试一个变量的true和false
- 尝试在C 程序中设置简单的键盘输入.使用变量存储True或false
- bitset::operator[] == false/true or bitset::test?