You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何重载Container类begin方法适配普通与const迭代器?

解决方案

要让begin()同时支持非const对象返回iterator、const对象返回const_iterator,只需要在Container类中重载两个版本的begin()方法:

修改后的Container类关键代码

template<typename T>
class Container {
    // ... 其他原有代码保持不变 ...

public:
    size_type size() const { return size_; }

    // 非const对象调用的版本:返回可修改的iterator
    iterator begin() {
        return iterator(arr_);
    }

    // const对象调用的版本:返回只读的const_iterator
    const_iterator begin() const {
        return const_iterator(arr_);
    }
};

原理说明

  • 调用非const对象v.begin()时,编译器会匹配非const成员函数版本,返回Vector<double>::iterator,满足第一种场景的需求;
  • 调用const对象v2.begin()时,编译器会匹配const成员函数版本,返回Vector<double>::const_iterator,满足第二种场景的需求。

补充说明

原代码中Iterator模板的定义已经能正确区分const和非const的指针/引用类型,所以只需要补充这两个重载方法即可,不需要修改迭代器的内部实现。

内容的提问来源于stack exchange,提问作者Timsan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 04:20:28