标准中是否有用于存储容器的开始和 end-iterators 的类型?

Is there a type in the standard for storing the begin- and end-iterators of a container?

我的问题很简单:标准中是否有一种类型的目的是为容器存储 begin-terator 和 end-iterator?

我想 return 来自单个函数的两个迭代器。我知道我可以为此使用 std::pair 但感觉标准中会有某种类型用于此确切目的。我扫描了 <iterator> header 但似乎找不到这样的类型。我不太擅长迭代器术语,所以我不确定其中一个是否真的能满足我的需求。有这样的吗?

(如果您对我一开始为什么想要这样做感兴趣,我在 class 模板中有常量数组,该模板派生自基数 class。使用多态性我想遍历它们的 class 常量,但我显然不能拥有基数 class return 的虚函数,因为它们是模板化的。因此,我有虚函数 returning 普通指针,称为 someArrayBegin()someArrayEnd()otherArrayBegin() 等,我在派生的 class 模板中覆盖到 return 正确的地址.)

Is there a type in the standard for storing the begin- and end-iterators of a container?

您的描述与范围的概念非常吻合。

std::ranges::subrange 可以从一对迭代器创建。这将根据迭代器类型进行模板化。

如果您需要隐藏运行时多态性的迭代器类型,您将需要 ranges::any_view,不幸的是,它不在范围的标准实现中。此外,还有与之相关的运行时成本。

对于连续的容器,另一种选择是std::span,它可以指向任何连续的范围而无需类型擦除的成本。特别是对于字符串,另一种选择是 std::string_view.