gpt4 book ai didi

c++ - 如何展平嵌套容器的迭代器?

转载 作者:可可西里 更新时间:2023-11-01 18:25:45 24 4
gpt4 key购买 nike

这是(还)(另一个)跟进 James 对这个问题的回答:Flattening iterator

如何修改 flattenig_iterator 使其递归工作?假设我有更多级别的嵌套容器并且我不想被限制在给定的嵌套深度。 IE。 flattening_iterator 应该与

std::vector< std::vector < std::vector < int > > >

还有

std::vector< std::vector < std::vector < std::vector < int > > > >

在我的实际代码中,我有一个对象数组,这些对象本身可能包含也可能不包含这样的数组。

编辑:

在尝试了遍历不同类型的嵌套容器的不同方法后,我学到了一些其他人可能也会感兴趣的东西:

使用嵌套循环访问容器元素的速度比使用迭代器解决方案快 5 到 6 倍。

优点:

  • 元素可以是复杂的对象,例如(就像我的例子)包含容器的类。
  • 执行速度更快

缺点:

  • 每个容器结构都需要一个新的循环实现
  • 标准库算法不可用

其他优点和缺点?

最佳答案

我将快速概述一个解决方案:

  1. 写一个is_container检测 begin() 的特征和 end()成员,或者可能是一些更复杂的规则;
  2. 写一个all_flattening_iterator<T>只是一个 flattening_iterator<all_flattening_iterator<typename T::value_type>> 的模板;
  3. 撰写 all_flattening_iterator<T> 的特化什么时候T不是只是常规迭代器的容器(使用默认模板 bool 参数)。

关于c++ - 如何展平嵌套容器的迭代器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11454825/

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