关于C++中的迭代器协议

问题描述 投票:0回答:1

GoF 书籍设计模式建议

begin()
end()
应该是迭代器方法。在 C++ 中,迭代器协议指定
begin()
end()
必须是可迭代对象的方法。

  1. 为什么要这样实施?这样你就可以轻松地写出类似
    std::find(a.begin() +3, a.begin() + 4, 5)
  2. 的内容
  3. 如果 C++ 中的迭代器按照 GoF 书中的描述实现,那么这些实际上就是范围?
c++
1个回答
0
投票

最初的假设已经是错误的。 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)

© www.soinside.com 2019 - 2024. All rights reserved.