gpt4 book ai didi

visual-studio-2010 - VS2010中使用set时remove_if的问题

转载 作者:行者123 更新时间:2023-12-04 15:04:41 24 4
gpt4 key购买 nike

我有以下代码。

#include <set>
#include <algorithm>

using namespace std;

int _tmain(int argc, _TCHAR* argv[])
{
typedef set<long> MySet;

MySet a;

for( int i = 0; i < 10; ++i)
{
a.insert(i);
}

MySet::iterator start,end,last;

start = a.begin();
end = a.end();

last = remove_if(start,end,bind2nd(less_equal<long>(),5));

return 0;
}

VS2005下用哪个编译好。但是使用 VS2010 时出现以下错误:

错误 1 ​​错误 C3892: '_Next' : 不能分配给 const c:\program files\microsoft visual studio 10.0\vc\include\algorithm 的变量

如果我让容器成为一个载体,一切都很好。

我猜我不知道的标准发生了一些变化,有人可以解释为什么这不再有效吗?

最佳答案

一个 std::set始终按排序顺序保持其元素。 std::remove_if尝试将您不想删除的元素移动到集合的开头。这将违反集合以排序顺序维护元素的不变量。

代码永远不应该工作。较旧的编译器可能没有足够严格地执行规则,让您知道它不应该起作用,但是(显然)您当前的编译器可以。

关于visual-studio-2010 - VS2010中使用set时remove_if的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3180869/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com