【发布时间】:2021-12-26 09:44:58
【问题描述】:
我想通过在std::vector 之上构建来设计一个自定义容器。我没有扩展它,而是决定使用组合,并为我的班级创建一个私有的 std::vector 成员。
我也想实现迭代器。这种方式怎么可能满足RandomAccessIterator的要求呢?我能够找到LegacyContiguousIterator,但也许我应该避免它,因为它是遗留问题。
【问题讨论】:
-
检查
std::random_access_iterator需要的操作,并一一实现。 -
有两组迭代器概念。
Legacy...Iterator(英文描述)和std::..._iteraator(实际C++20concepts)。为了安全起见,您应该同时遵循两者。 -
@IterAtor - 如果你使用
std::vector作为存储,你已经有std::vector::iterator迭代存储。所以第一次尝试是重用那个迭代器,这行不通吗? -
@IterAtor 您需要决定是保留旧接口(例如,通过提供支持旧接口的迭代器并将使用该接口的每个操作映射到底层向量的迭代器)还是实现符合标准概念。第一个不需要实现符合标准要求的迭代器。如果您没有支持旧接口的特定要求,那么您可以直接使用向量的迭代器(并更新所有使用旧接口的代码,使其使用向量的迭代器)。
标签: c++ iterator c++20 c++-concepts