GoF 书籍设计模式建议
begin()
和 end()
应该是迭代器方法。在 C++ 中,迭代器协议指定 begin()
和 end()
必须是可迭代对象的方法。
std::find(a.begin() +3, a.begin() + 4, 5)
?最初的假设已经是错误的。 C++ 协议是
std::begin(iterableObject)
和 std::end(iterableObject)
,(除非重载)转发到 iterableObject.begin()
和 iterableObject.end()
。
原因是原始 STL(C++ 1998 标准之前)已经被设计为使用原始数组,它无法提供
begin
和 end
方法。相反,原始数组的迭代器是原始指针。 (例如 int a[4]
和 int*
)。您的示例 std::find
可以开箱即用,例如`std::find(a, a+4, 5)