- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
VS2010编译错误:
c:\program files (x86)\microsoft visual studio 10.0\vc\include\algorithm(1840): error C2678: binary '=' : no operator found which takes a left-hand operand of type 'const triangle' (or there is no acceptable conversion)h:\kingston_backup\ocv\ocv\delaunay.h(281): could be 'triangle &triangle::operator =(const triangle &)'while trying to match the argument list '(const triangle, const triangle)'c:\program files (x86)\microsoft visual studio 10.0\vc\include\algorithm(1853) : see reference to function template instantiation '_FwdIt std::_Remove_if,_Pr>(_FwdIt,_FwdIt,_Pr)' being compiledwith[ _FwdIt=std::_Tree_unchecked_const_iterator,std::allocator,true>>>, _Mytree=std::_Tree_val,std::allocator,true>>, _Pr=triangleIsCompleted]h:\kingston_backup\ocv\ocv\delaunay.cpp(272) : see reference to function template instantiation '_FwdIt std::remove_if,triangleIsCompleted>(_FwdIt,_FwdIt,_Pr)' being compiledwith[ _FwdIt=std::_Tree_const_iterator,std::allocator,true>>>, _Mytree=std::_Tree_val,std::allocator,true>>, _Pr=triangleIsCompleted]
I think the problem is in passing the arguments to the remove_if()
of the STL, as suggested by the compiler error. I have added the following comment to the line:
//**** ERROR LINE
class triangleIsCompleted
{
public:
triangleIsCompleted(cvIterator itVertex, triangleSet& output, const vertex SuperTriangle[3])
: m_itVertex(itVertex)
, m_Output(output)
, m_pSuperTriangle(SuperTriangle)
{}
bool operator()(const triangle& tri) const
{
bool b = tri.IsLeftOf(m_itVertex);
if (b)
{
triangleHasVertex thv(m_pSuperTriangle);
if (! thv(tri)) m_Output.insert(tri);
}
return b;
}
};
// ...
triangleSet workset;
workset.insert(triangle(vSuper));
for (itVertex = vertices.begin(); itVertex != vertices.end(); itVertex++)
{
tIterator itEnd = remove_if(workset.begin(), workset.end(), triangleIsCompleted(itVertex, output, vSuper)); //**** ERROR LINE
// ...
}
最佳答案
remove_if
不会删除任何内容(在删除的意义上)。它复制周围的值,以便所有剩余值都在范围的开头结束(并且范围的其余部分或多或少处于未指定的状态)。
由于关联容器中的键是不可变的,因此不可能将值从一个位置复制到另一个位置,因此 remove_if
不能用于它。
标准库似乎不包含 set 的 remove_if,因此您必须自己动手。它可能看起来像这样:
#include <set>
template <class Key, class Compare, class Alloc, class Func>
void erase_if(std::set<Key, Compare, Alloc>& set, Func f)
{
for (typename std::set<Key, Compare, Alloc>::iterator it = set.begin(); it != set.end(); ) {
if (f(*it)) {
set.erase(it++); //increment before passing to erase, because after the call it would be invalidated
}
else {
++it;
}
}
}
关于c++ - remove_if() 编译错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8566799/
我有一个弱指针 vector ,如果指针仍然存在,我想遍历该列表并执行一个函数。如果指针不见了,我想将其移除。 class my_class { public: std::shared_ptr
我一直在阅读最新的 C++ 规范,但我无法弄清楚是否可以为同一元素多次调用 remove_if。特别是,我正在查看在 deque 迭代器上调用的 std::remove_if。据我所知,如果它所做的只
我正在尝试从字符串中删除空格。但抛出错误。 我的代码哪个参数做错了..感谢您的查看 我的主要功能 #include #include #include #include #include #
在下面的示例中,我从列表中删除了 pr2 对其应用返回 true 的范围内的一些元素。 m_list.remove_if(pr2(*tmp_list)); 在我看来有必要删除上面删除的这个对象,因为当
如果那些没有修改容器?例如,我想输出我从 vector 中删除的所有整数(我不想使用多次传递:例如:partition + output + erase)。撇开设计恐怖不谈,这是合法的: v.eras
我想删除按引用传递的字符串中的第一个和最后一个括号。不幸的是,我很难有条件地删除第一个和最后一个元素。我不明白为什么 remove_if 不能像我期望的那样使用迭代器。 Demo #include
我想使用 remove_if 函数从 vector 中删除元素,但将删除限制为 N 个元素。 例子: // predicate function that determines if a value
VS2010编译错误: c:\program files (x86)\microsoft visual studio 10.0\vc\include\algorithm(1840): error C2
有人可以告诉我如何使用 Remove_If 进行一些不区分大小写的比较吗? 目前我是这样做的: template struct is_literal { enum{value = false};
我正在考虑在下面的伪代码中对字符串 vector 使用 remove_if: for(some strings in a given set) { remove_if(myvec.begin(),
我正在尝试使用 std::remove_if从一个简单的字符串中删除空格,但我得到了奇怪的结果。有人可以帮我弄清楚发生了什么吗? 该代码是: #include #include #include
我的 remove_if 似乎正在用过滤掉的元素的值覆盖未过滤掉的元素。这些代码的目的是允许用户过滤和仅显示某个类别的教师。 (不删除任何元素)下面是部分代码 static string compar
我想知道是否可以使用 remove_if 和 lambda 表达式来表示此表达式。 std::list::iterator astit = actors.begin();
我收到的以下代码的错误消息是: error C2662: 'DamageNumbers::IsAlive' : cannot convert 'this' pointer from 'cons
我正在为具有硬编码最大元素数 N 的数据结构开发一种删除方法,它依赖于 std::array 来避免堆内存。虽然 std::array 只包含 N 个元素,但只有 M 个元素,其中 M 是“相关”元素
我正在尝试从字符串中删除空格 line.erase(remove_if(line.begin(), line.end(), isspace), line.end()); 但是 Visual Studi
我正在尝试使用 remove_if 从 vector 中删除对,但出现错误 bool MyClass::isSingleTag(const pair & val) { string tag =
这里的str是一个string: str.erase(std::remove_if(str.begin(), str.end(), &islower)); 似乎只删除字符串前面的小写字符。为什么会这样
我想知道如何根据条件从列表中删除对象。 经过研究,我得到了这个,但是还是不行! 所以我想知道如何使用带删除的remove_if。 Class A { public: A(int x,int y
我有密码 vector v; v.erase(remove_if(v.begin(),v.end(),bool_checker),v.end()); 其中 v 是一个包含随机数 {2, 4 ,5,
我是一名优秀的程序员,十分优秀!