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

The*_*ine 1 c++ algorithm iterator stl

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

class Wrapper {
    public:
        Wrapper() = default;
        std::vector<int> vec;
};
Run Code Online (Sandbox Code Playgroud)

我想让它迭代我的类的实例与迭代底层容器相同。例如,我想写这样的内容:

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

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

我该怎么做呢?像这样的事情至少需要实现什么?完整的实现需要什么才能使该类Wrapper可以与大多数/所有标准算法一起使用?

我正在寻找一种 C++17 方法,而不依赖于 boost 或其他非标准库。

Rem*_*eau 6

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

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

        auto begin() { return vec.begin(); }
        auto end() { return vec.end(); }
}; 
Run Code Online (Sandbox Code Playgroud)

附带说明:可以使用range-for 循环for_each()简化:

for(const auto& elem : w) {
   std::cout << elem << std::endl;
}
Run Code Online (Sandbox Code Playgroud)