标准中是否有用于存储容器的开始和 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
.
我的问题很简单:标准中是否有一种类型的目的是为容器存储 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
.