【问题标题】:forward iterators, how to return const value转发迭代器,如何返回 const 值
【发布时间】:2017-06-24 10:41:57
【问题描述】:

我做了一个动态数组类,数组中的每个元素都是通过这样的结构定义的

template <typename T>
struct element{
    int i;
    int j;
    T val;
};

我已经为我的类定义了前向迭代器和常量迭代器,迭代器需要返回返回i, j, val但只有val可以修改,ij不能修改。
我该怎么做?

【问题讨论】:

    标签: c++ class struct iterator constants


    【解决方案1】:

    扩展@Bathsheba 的答案,您的迭代器可以返回这个结构:

    template<typename T>
    struct element_ref {
        const int& i;
        const int& j;
        T& val;
    
        element_ref(element& e) : i(e.i), j(e.j), val(e.val) {}
    };
    

    它的构造函数获取实际元素并存储对其字段的引用。只有 val 引用是可修改的。

    【讨论】:

    • 是的,越来越热了。
    【解决方案2】:

    在某些方面,这可能会很麻烦,因为您必须重写构造函数和赋值运算符,但您可以编写

    template <typename T>
    struct element{
        int i;
        int j;
        T val;
        const int& _i;
        const int& _j;
    };
    

    在构造时将_i_j 绑定到ij。您的前向迭代器返回这些引用,而不是直接返回 ij

    如果有人能想到更好的方法,请投反对票。

    【讨论】:

    • 但在迭代器中我有一个成员数据,如:element *ptr,我从不直接访问 i 和 j。我会发布迭代器,但它是 70 行,可以吗?
    猜你喜欢
    • 2019-02-04
    • 1970-01-01
    • 2017-01-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-17
    • 1970-01-01
    • 2020-10-02
    相关资源
    最近更新 更多