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