const_iterator <T>和iterator <const T>有什么区别?

Bee*_*ope 8 c++ iterator const const-iterator

假设我正在实现一个集合,例如std::vector。我需要实现iteratorconst_iterator,但是一旦完成,iteratorconst_iterator不能仅实现为iterator<const T>T集合中的类型在哪里)?

一定有原因为什么它不起作用,因为有上百万个问题有关如何在实现时重用代码iteratorconst_iterator但是没有一个说“仅const T作为类型使用”。

eer*_*ika 4

std::iterator_traits<Iter>::value_type应该是Tconst_iterator<T>但是const T1iterator<const T>。如果您使用iterator<const T>as const_iterator<T>,则必须违反这些假设之一。

只要值类型的常量是与迭代器的常量不同的模板参数,就应该可以对两个迭代器使用通用模板。就像是:

template<class T>
struct container
{
    template<class ItPtr>
    struct iterator_common
    {
        using value_type = T;
        using pointer = ItPtr;
        using reference = std::remove_pointer_t<ItPtr>&;
        // ...
    };

    using iterator = iterator_common<T*>;
    using const_iterator = iterator_common<const T*>;
    // ...
};
Run Code Online (Sandbox Code Playgroud)

1直到C++20,其中应该是std::remove_cv_t<const T>which T。因此,这对您在未来标准版本中的建议不会有问题。