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

如何为自定义C++ Array类实现std::contiguous_iterator迭代器

实现说明

C++20标准库的迭代器概念是基于类型特征自动推导的,不需要你主动做特殊的「标记放置」操作,你只需要为自定义迭代器补全所有std::contiguous_iterator要求的关联类型与运算符,编译器会自动校验该迭代器是否符合对应概念。

你需要给Iterator内部类补充的核心部分语法示例如下:

import <iterator>;
import <type_traits>;

template<typename T, int SIZE>
class Array {
public:
    const T& operator[](int i) const { return mArray[i]; }
    T& operator[](int i) { return mArray[i]; }

private:
    T mArray[SIZE];

public:
    struct Iterator {
        // 必须定义的迭代器关联类型,是概念校验的基础
        using iterator_category = std::contiguous_iterator_tag;
        using value_type = std::remove_cv_t<T>;
        using difference_type = std::ptrdiff_t;
        using pointer = T*;
        using reference = T&;

        constexpr Iterator(T* ptr) : mPtr(ptr) {}

        // 核心运算符实现(剩余要求的运算符可自行补全)
        constexpr reference operator*() const noexcept { return *mPtr; }
        constexpr pointer operator->() const noexcept { return mPtr; }
        constexpr Iterator& operator++() noexcept { ++mPtr; return *this; }
        constexpr Iterator operator++(int) noexcept { auto tmp = *this; ++mPtr; return tmp; }
        // 其余需要实现的运算符:--、+=、-=、[]、比较运算符、迭代器相减等

        // 可选:显式静态校验迭代器是否符合要求,编译期就能直接给出校验结果
        static_assert(std::contiguous_iterator<Iterator>);
    private:
        T* mPtr;
    };

    Iterator begin() { return Iterator(&mArray[0]); }
    Iterator end() { return Iterator(&mArray[SIZE]); }

    // 实际使用时建议同步补充const迭代器实现,此处省略
};

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 11:45:07