问题标签 [boost-iterators]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
557 浏览

c++ - iterator_traits 中嵌套的指针类型有什么用?

std::iterator_traits模板定义了 5 种嵌套类型:iterator_categoryvalue_typedifference_type和. 浏览libc++ 和 libstdc++ 头文件的来源,可以看到 , 和 的许多用途,但只有一种用于(inside ) 而没有用于.pointerreference<algorithm>value_typedifference_typeiterator_categoryreferencestd::iter_swappointer

我的应用程序使用手动构建的代理迭代器/代理引用对。我想过渡到使用 Boost iterator_facade,它可以让我将引用类型从默认配置T&为任意类型,但对于T*默认的指针类型则不然。pointer我想避免被嵌套类型的一些深藏不露的使用所困扰。

注意:迭代器是没有嵌套成员的内置类型的代理,所以我不需要兼容operator->(返回类型为pointer)。

问题pointer:标准库中的嵌套类型有哪些用例iterator_traits

0 投票
2 回答
1687 浏览

c++ - 用于多维 C 数组的 C++ 迭代器

我有大量需要迭代的 3 到 6 维 C 数组。像 boost::multi_array 这样的更多 C++'y 表示不是一个选项,因为这些数组来自 C 框架 PETSc(使用 fortran 排序,因此向后索引)。简单的循环最终看起来像这样:

甚至更糟:

有很多这样的例子,循环索引的范围不同,这一切都变得非常丑陋并且可能容易出错。应该如何为这样的多维数组构造迭代器?

0 投票
2 回答
687 浏览

c++ - 在第三方容器中使用基于范围的 for 循环

我目前正在使用一个第三方库,其中包含一个仅提供索引查找的类,即operator[].

我想对这个类的内容做一个基于范围的 for 循环。但是,由于从未编写过迭代器或迭代器适配器,我很迷茫。似乎编写迭代器并不是一项简单的任务。

我想要的用法是:

而不必写:

如何做到这一点?Boost 是否提供此功能?

0 投票
1 回答
498 浏览

c++ - 将任何迭代器转换为随机访问迭代器的适配器

我有任何不提供随机访问迭代器的容器,目标是创建一个适配器,该适配器接受此类迭代器的输入并为容器提供随机访问迭代器接口。

我不确定如何使用boost::iterator_facade,因为它有点令人困惑:-/ 有一些关于堆栈溢出的示例,但我不确定如何使用它们(这里

任何链接/示例都可能会有所帮助。(boost考虑到我在boost

0 投票
1 回答
771 浏览

c++ - 在 C++ 中将惰性生成器实现为 forward_iterator

MyGenerator 表示(可能)有限的整数序列,计算成本很高。所以我不想预先生成它们并将它们放入容器中。

全部打印:

如何实现遵循 forward_iterator 协议的类似生成器?

boost::function_input_iterator接近,但我不知道预先的元素数量。

0 投票
1 回答
287 浏览

c++ - boost::range::detail::any_iterator 不能很好地与 boost::zip_iterator 配合使用

考虑以下代码:

它在没有优化的情况下编译时按预期工作(即打印“1 a\n2 b ...”),但在使用 -O2 编译时会出现段错误或产生垃圾(同时使用 clang-3.6.0 和 gcc-4.9.2, boost 1.56.0) 我不知道出了什么问题。

此外,当 IntCharIterator 包装器被删除时,代码在任一优化级别上都可以按预期工作。

有谁知道这里发生了什么?

0 投票
1 回答
200 浏览

c++ - boost:type_erasure 和 boost::iterator_facade 之间的冲突

考虑这个非常简单的程序:

这无法编译:

我不想去更改那些头文件。我该如何解决这个问题?

0 投票
2 回答
376 浏览

c++ - {} 是否是传递给期望迭代器的函数的有效参数(表示某些容器的 std::end() )?

boost directory_iterator 示例中-如何列出不递归的目录文件(请参阅此答案)是示例代码

p是类型boost::filesystem::path。)

在查看文档make_iterator_range后,我认为被调用的构造函数是这个:

如果我是对的,那么上面代码示例中传递的第二个参数{}, 似乎对应于任何容器的结尾,该容器被directory_iterator.

我以前从未见过这种情况。

是否可以end仅通过从空的初始值设定项列表中构造这样的迭代器来构造迭代器{}?(我的措辞是否正确?)

鉴于如此构造的迭代器的类型必须与第一个迭代器的类型相匹配directory_iterator(p)((这里是否进行模板参数推导?)

0 投票
1 回答
175 浏览

iterator - 在 Boost Graph Library 中,为什么添加边会使边迭代器(和其他问题)无效?

关于BGL 文档中标记为“描述符和迭代器无效摘要”的图表的几个问题:

  1. 为什么添加边会使边和邻接迭代器无效;为什么 add_edge() 行的每一列都不是“OK”?不会简单地附加输入/输出边缘列表吗?
  2. 如果图是有向的,为什么删除边只会使边迭代器无效?为什么第二行倒数第二列不只是“EL=vecS”?在无向图的情况下,不会从两个边列表(一个用于源顶点,一个用于目标顶点)中删除一条边,这会使这两个列表中的迭代器无效?

谢谢!

0 投票
1 回答
266 浏览

boost - Custom Iterator using boost iterator

I've a custom data structure like following:

I need to implement these APIs. How can I implement these using boost iterator library?

Also, I may need to take a Predicate to allow filtering

Some pointer to get started will be very helpful. One clarification: I cannot use c++0x compiler flags as I need to use c++98 only. So, please suggest a solution that doesn't need c++11 or c++03 compiler flag.

Also, if I design an iterator like following (nested in the GraphDM class), I'm essentially exposing details my data-structure. Is there a way to make the iterator to iterate only on the Key's of the map (and not the value)? Then I can return a different type of iterator for the getFanins() and getFanout() which would be iterator from the value list.