edr*_*zen 6 c++ iterator nested-loops
假设我们有以下嵌套循环:
MyClass myobject;
for (const std::array<int,16>& arr : myobject)
{
for (int i : arr) { /* do something with i */ }
}
Run Code Online (Sandbox Code Playgroud)
例如, whereMyClass
可以迭代 16 个整数的数组。
现在,我想要一个循环来迭代所有数组的所有整数myobject
:
for (int i : MagicClass(myobject)) { /* do something with i */ }
Run Code Online (Sandbox Code Playgroud)
MagicClass
我想要设计的课程在哪里。我知道MagicClass
应该实现begin/end
返回特定迭代器的方法,即。就像是:
class MagicClass
{
public:
MagicClass (MyClass obj) : obj_(obj) {}
struct iterator
{
// the hard part comes here...
};
iterator begin() { return iterator (obj_.begin()); }
iterator end () { return iterator (obj_.end ()); }
private:
MyClass obj_;
};
Run Code Online (Sandbox Code Playgroud)
由于我正在努力获得一个像样的实现MagicClass::iterator
,我想知道是否已经存在通用的解决方案。
是否有任何库可以通过单个迭代器将嵌套循环(迭代其他容器的容器)转换为单个循环?或者至少,实施的最佳实践应该是什么MagicClass::iterator
?
Hol*_*Cat 12
它被称为std::views::join
.
#include <array>
#include <iostream>
#include <ranges>
int main()
{
std::array<std::array<int, 3>,3> arr = {{
{1,2,3},
{4,5,6},
{7,8,9},
}};
for (int x : arr | std::views::join)
std::cout << x << '\n'; // 1 2 3 4 5 6 7 8 9
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
146 次 |
最近记录: |