gpt4 book ai didi

c++ - 简化嵌套的 STL 容器遍历

转载 作者:搜寻专家 更新时间:2023-10-31 01:14:47 24 4
gpt4 key购买 nike

我有一个包含涉及 STL 容器的嵌套遍历的代码。特别是我有一个包含子列表的顶级容器(列表),而这些子列表包含更多子列表。例如在 DICOM 结构中,一个患者可以有多个研究,每个研究可以有多个系列。我必须对 Series 对象执行一些操作,而到达它们的唯一方法是深入循环,如下所示。

伪代码如下所示。

STLContainer top;
STLContainer::iterator top_iter;

for ( top_iter= top.begin(); top_iter != top.end(); ++top_iter) {
STLContainer mid = *top_iter;
STLContainer::iterator mid_iter;

for ( mid_iter = mid.begin(); mid_iter!= mid.end(); ++mid_iter) {
STLContainer bottom = *mid_iter;
STLContainer::iterator bottom_iter;

for(bottom_iter = bottom.begin(); bottom_iter != bottom.end(); ++bottom_iter){
ExecuteSomething(*bottom_iter); // Finally do something with the stored object
}
}

现在如果我必须对这些“底部”对象重复执行一系列操作,我必须一次又一次地进行遍历。如果我想使用 STL 算法,我需要为每个嵌套级别编写至少 3 行“for_each”。

有谁知道可以缩短这段代码的技术,它可以像这样工作?

// Drills down to the deepest nested container
for_each(top.begin(), top.end(), DrillDownAndExecuteOnBottom());

哪个可以在一行中工作?是这样的吗?谢谢!

最佳答案

假设容器不都是相同的元素类型:

struct DrillDownAndExecuteOnBottom
{
template<typename T>
void operator()(T& t) const
{ for_each(t.begin(), t.end(), *this); }

void operator()(Bottom& b) const
{ ExecuteSomething(b); }
};

这将进行深度优先遍历,直到到达 Bottom 对象。

关于c++ - 简化嵌套的 STL 容器遍历,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10918072/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com