C++ C++—`算法`library and namespace`std`

C++ C++—`算法`library and namespace`std`,c++,namespaces,C++,Namespaces,我发现一个人可以使用算法库的许多(可能是所有)函数,无论是否使用命名空间std:例如,导入算法时: #include <algorithm> 输出: 10 20 30 20 10 30 20 20 10 10 20 30 20 10 30 20 20 10 1) 它们的功能相同吗 2) 无论使用std名称空间,支持使用这些函数的机制是什么?我查阅了源代码: 及 但我仍然不知道这是怎么回事 提前谢谢。如注释中提到的

我发现一个人可以使用
算法
库的许多(可能是所有)函数,无论是否使用命名空间
std
:例如,导入
算法
时:

#include <algorithm>
输出:

10 20 30 20 10 30 20 20 10
10 20 30 20 10 30 20 20 10
1) 它们的功能相同吗

2) 无论使用
std
名称空间,支持使用这些函数的机制是什么?我查阅了源代码:

但我仍然不知道这是怎么回事


提前谢谢。

如注释
中提到的
std::
由于依赖于参数的查找而起作用

v.begin()
v.end()
返回
std::vector::iterator
,它是
std::vector
的某种迭代器。这可以是满足迭代器要求的任何类型。它可以是指向
int
的简单指针,或者更可能是带有重载运算符的类

如果迭代器是类类型,则依赖于参数的查找将搜索该类中的
unique
,以及包含命名空间范围的类。如果封闭的命名空间范围恰好是
::std
,则将找到并使用
::std::unique

这不能保证有效。这取决于标准库实现是否会

例如,使用
std::array
而不是
std::vector
时,它可以在MSVC上工作,但不能在Clang(使用libc++)或GCC(使用libstdc++)上工作,因为后两者只使用
int*
作为迭代器,请参阅


您应该始终使用限定名引用
std::unique

如注释
unique
中所述,不使用
std::
的情况下,由于依赖于参数的查找,因此有效

v.begin()
v.end()
返回
std::vector::iterator
,它是
std::vector
的某种迭代器。这可以是满足迭代器要求的任何类型。它可以是指向
int
的简单指针,或者更可能是带有重载运算符的类

如果迭代器是类类型,则依赖于参数的查找将搜索该类中的
unique
,以及包含命名空间范围的类。如果封闭的命名空间范围恰好是
::std
,则将找到并使用
::std::unique

这不能保证有效。这取决于标准库实现是否会

例如,使用
std::array
而不是
std::vector
时,它可以在MSVC上工作,但不能在Clang(使用libc++)或GCC(使用libstdc++)上工作,因为后两者只使用
int*
作为迭代器,请参阅

您应该始终使用其限定名称引用
std::unique

可能:可能。可能:可能。
10 20 30 20 10 30 20 20 10
10 20 30 20 10 30 20 20 10