是否有任何一般偏好或规则来解释何时应使用容器特定版本的 begin 和 end 来代替自由函数 std::begin
和 std::end
?
我的理解是,如果函数是一个模板,而容器类型是一个模板参数,那么应该使用 std::begin
和 std::end
,即:
template<class T> void do_stuff( const T& t )
{
std::for_each( std::begin(t), std::end(t), /* some stuff */ );
}
在已知容器类型的标准/成员函数等其他场景中呢?使用 std::begin(cont)
和 std::end(cont)
还是容器的成员函数 cont.begin() 还是更好的做法
和 cont.end()
是首选?
我是否正确假设通过调用 cont.end()
而不是 std::end(cont)
对性能没有好处?
最佳答案
自由函数版本比容器的成员函数更通用。我可能会在通用代码中使用它,其中容器的类型事先不知道(并且可能是一个数组)。在其余代码中(即当容器固定且已知时),由于惯性,我可能会使用 c.begin()
。我希望有关 C++ 的新教科书会推荐免费函数版本(因为它永远不会更糟,有时会更好),但这必须 catch 常见用法。
关于c++ - 何时使用 std::begin 和 std::end 而不是容器特定版本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8452130/