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 或其他非标准库。
最简单的解决方案是仅返回容器自己的迭代器,例如:
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)