Ric*_*ich 6 stl visual-studio-2005 set visual-studio-2010
我有以下代码.
#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;
}
Run Code Online (Sandbox Code Playgroud)
哪个在VS2005下用来编译好.但是使用VS2010我收到以下错误:
错误1错误C3892:'_ Next':您无法分配给const c:\ program files\microsoft visual studio 10.0\vc\include\algorithm的变量
如果我把容器变成矢量,一切都很好.
我猜我的标准中有些东西已经改变,我不知道,有人可以说明为什么这个不再有效吗?
A std::set
始终按排序顺序保留其元素.std::remove_if
尝试将您不想删除的元素移动到集合的开头.这将违反set按顺序维护元素的不变量.
代码永远不应该有效.较旧的编译器可能没有足够严格地强制执行规则,以便让您知道它不应该工作,但(显然)是您当前的规则.