在 C 11 中使用非成员 begin 和 end 函数
尽管标准容器中存在成员函数 begin 和 end,C 11引入了同名的非成员函数。虽然这些免费函数的性能与成员函数类似,但它们具有以下几个优点:
通用编程:
非成员版本通过允许操作来实现通用编程跨不同数据结构的迭代器。例如,您可以使用它们来处理标准容器和 C 数组,它们没有成员 begin 和 end 函数。
与对象类型解耦:
通过使用自由函数,您可以将代码与特定对象类型分离。当使用具有替代或非标准的开始和结束实现的容器时,这可能是有益的,允许您在不知道其确切类型的情况下一致地处理这些容器。
提高了可读性:
自由函数可以通过删除不必要的对象名称来提高代码可读性。除了编写:
<code class="cpp">auto i = v.begin(); auto e = v.end();</code>
您可以编写:
<code class="cpp">auto i = std::begin(v); auto e = std::end(v);</code>
这在处理循环或复杂表达式中的多个容器时特别有用。
可扩展性:
可以轻松扩展免费功能以支持自定义容器。正如 Herb Sutter 所提到的,这对于可能没有成员开始和结束函数的非标准容器来说是有利的。
何时使用非成员函数:
一般情况下,建议在以下情况下使用非成员 std::begin 和 std::end 函数:
以上是什么时候应该在成员函数上使用'std::begin”和'std::end”?的详细内容。更多信息请关注PHP中文网其他相关文章!