C++ std::使用-std=gnu+编译时出现相等错误+;11开关

C++ std::使用-std=gnu+编译时出现相等错误+;11开关,c++,vector,std,C++,Vector,Std,当我在没有-std=gnu++11开关的情况下编译时,这个循环工作得很好。如果使用-std=gnu++11编译,则会出现以下错误: no match for call to '(__gnu_cxx::__normal_iterator<const float*, std::vector<float> >) (const float&, const float&)' if (!bool(__binary_pred(*__first1, *__first2))

当我在没有-std=gnu++11开关的情况下编译时,这个循环工作得很好。如果使用-std=gnu++11编译,则会出现以下错误:

no match for call to '(__gnu_cxx::__normal_iterator<const float*, std::vector<float> >) (const float&, const float&)' if (!bool(__binary_pred(*__first1, *__first2))) 

在C++14之前,
std::equal
使用三个迭代器:两个描述第一个范围,一个描述第二个范围的开始。没有理由使用第四个迭代器,因为两个范围必须是相同的长度(同样,直到C++14)

四迭代器版本是在C++14中添加的,并且不适用于您选择的语言变体(该标志影响标准库,而不仅仅是语言)


因为范围长度在代码中总是匹配的,所以您可以删除第四个参数。

直到C++14,
std::equal
使用三个迭代器:两个描述第一个范围,一个描述第二个范围的开始。没有理由使用第四个迭代器,因为两个范围必须是相同的长度(同样,直到C++14)

四迭代器版本是在C++14中添加的,并且不适用于您选择的语言变体(该标志影响标准库,而不仅仅是语言)


由于范围长度在代码中总是匹配的,所以您可以删除第四个参数。

应该是它吗?我的意思是,我真的不知道Vector元素的大小,为什么要使用这个开关?@krubo是relevant吗?它是relevant,因为我有另一个库,它是在-std=gnu中编译的++11@AniketChowdhury代码在功能上是正确的。我不知道为什么我通过这个开关得到这个错误。它不应该是_Afor (auto it_A = std::begin(vector_A); it_A != std::end(vector_A); it_A += 4) { bool found_in_B = false; for (auto it_B = std::begin(vector_B); !found_in_B && it_B != std::end(vector_B); it_B += 4) { found_in_B = std::equal(it_A, it_A + blockSize, it_B, it_B + blockSize); } }