呼叫std::sort()
时std::array
:
#include <vector>
#include <array>
#include <algorithm>
int main() {
std::vector<int> foo{4, 1, 2, 3};
sort(begin(foo), end(foo));
std::array<int, 4> foo2{4, 1, 2, 3};
sort(begin(foo2), end(foo2));
}
gcc和clang都在std::array
--clang说的排序上返回错误
错误:使用未声明的标识符“ sort”;您是说'std :: sort'吗?
进行更改以std::sort(begin(foo2), end(foo2))
解决问题。
MSVC按照编写的方式编译上面的代码。
std::vector
和之间为什么区别对待std::array
; 哪个编译器正确?
@Someprogrammerdude简而言之,VC ++ stdlib中的所有容器都使用在
—
弗朗索瓦·安德里厄
namespace std
甚至简单指针类型都可以使用的地方定义的类类型迭代器。我相信这是为了插入调试-构建检查以检测溢出和其他常见错误。
sort(...
->std::sort(...
。我猜想是ADL(依赖参数的查找)使您感到困惑。那或演绎指南。在任何情况下; 始终限定您调用的功能。