C++中如何实现自定义类的迭代器遍历

pkwftd7m  于 2023-05-02  发布在  其他
关注(0)|答案(1)|浏览(149)

假设我有一个类,它只是一个标准容器的 Package 器(例如,vector,但也可以是任何其他容器):

class Wrapper {
    public:
        Wrapper() = default;
        std::vector<int> vec;
};

我想让它这样,遍历我的类的示例和遍历底层容器是一样的。例如,我想写这样的东西:

Wrapper w;
// ... input some data into vec

std::for_each(w.begin(), w.end(), [](const auto& elem) {
   std::cout << elem << std::endl;
}

我该怎么做呢?对于这样的东西,最低要求的实现是什么?为了使Wrapper类可以与大多数/所有标准算法一起使用,完整的实现需要什么?
我正在寻找一种C++17方法,而不依赖于boost或其他非标准库。

brccelvz

brccelvz1#

最简单的解决方案是只返回容器自己的迭代器,例如:

class Wrapper {
    public:
        Wrapper() = default;
        std::vector<int> vec;

        auto begin() { return vec.begin(); }
        auto end() { return vec.end(); }
};

顺便说一句:您的for_each()可以使用range-for loop来简化:

for(const auto& elem : w) {
   std::cout << elem << std::endl;
}

相关问题