问题标签 [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 回答
748 浏览

c++ - c++ 提升范围:any_range 和转换后的适配器

我正在尝试将使用 boost 转换适配器的 boost 范围包装到 boost any 范围中,但这似乎不起作用。我构建了一个最小的例子来说明。

在发布模式下,我的 VS2015 编译器不断告诉我“返回局部变量或临时地址”。该代码在执行时也无法正确执行。在调试模式下一切都很好。

我认为不知何故any_range无法理解转换后的适配器按值返回,即使我明确地将 Reference 模板参数设置为double而不是 default double&

我在做什么错any_range?(使用提升 1.64.0)

0 投票
1 回答
116 浏览

c++ - 对目录进行更改后,如何“更新” diretory_iterator?

我正在使用 C++ 和 Boost::filesystem 编写程序。该程序应该在给定目录中拍照并将它们移动到文件夹中。每个文件夹应该只保存给定数量的图片。

该路径pic_move_from在另一个函数中使用。这个另一个函数为此使用了一个目录迭代器path,并且在这个函数中,目录被添加到 . 引用的目录中path pic_move_from。我试图为这个目录创建一个新的迭代器,以便我可以将目录中的任何图片移动到新添加的子目录中。但是,新的 directory_iterator 并未“更新”以使用目录中的新条目。那么,如何“更新”directory_iterator?

更新:我试图尽可能简化这段代码,所以我想出了下面的测试/示例。这个例子工作得很好,并在第二次迭代期间打印出新文件夹,所以我必须仔细检查原始代码中的所有内容。

0 投票
2 回答
87 浏览

c++ - 提升 zip_iterator 忽略 const 正确性

在以下代码的函数内部的for循环中,即使在循环中使用main()了,我也可以更改变量内部的变量。有没有办法避免这种情况?abconst auto&

0 投票
0 回答
297 浏览

python - 提升 Python 元组迭代器

我正在尝试使用以下代码将元组上的迭代器从 C++ 导出到 Python:

在python中,我使用这样的迭代器:

C++ 的输出如下所示:

最后,收到的错误是这个: 断言错误

我是否必须从 Python 管理对象的生命周期?

0 投票
2 回答
235 浏览

c++ - 使用 Boost zip_iterator 将两个向量写入 CSV 文件

我有两个要以 CSV 格式写入文件的向量。我可以使用 for 循环“手动”执行此操作,但我第一次尝试使用 boost zip_iterator。这就是我能走多远。(网络版

请注意,这适用于遗留项目,因此我不能使用较新版本的 C++(例如 C++11、C++14、C++17)

错误消息的片段(整个内容太长,无法粘贴)

0 投票
1 回答
495 浏览

c++ - 我编写了 C++ 代码来将 boost::optional 视为一个范围,但它不能编译

我希望将 boost::optional 视为可以包含零个或一个元素的容器。从逻辑上讲,我应该能够为容器创建一个迭代器并在其上使用 boost::for_each。我的尝试如下,但无法编译。我在GodBolt上试过了。

https://godbolt.org/g/z5MFfe

下面的代码供参考。

我相当确定我已经正确地实现了范围和迭代器的概念,但是我在 gcc 8.1 中得到了以下编译器错误(根据 godbolt)

0 投票
0 回答
212 浏览

c++ - 使用 boost::range 的相邻适配器

我在问自己是否可以boost-range通过适配器进行扩展,我称之为adjacentAdaptor. 这个适配器基本上应该遍历 a 中的所有相邻元素对vectorlist依此类推。

我认为这个函数在我的用例中非常有用,我经常需要遍历表示时间步长的列表。

最后一个 for 循环的输出应该是这样的:

只有一个元素或没有元素的向量不应该产生任何结果。

我尝试使用boost::adaptors::sliced生成必要的子列表,但后来我不知道如何boost::range帮助我将两个子范围压缩到一个。

我刚刚找到了一个可能的解决方案boost::iterators,但我真的不喜欢必须编写的代码量。我也错过了firstsecond而是我不得不写一个笨拙的get<>. 不幸的是,如果向量为空,程序就会崩溃!

我很高兴能在这个问题上得到任何帮助。

自己的部分解决方案

经过一些模板类型的推断,我想出了一些相对有用的东西。

first不过,使用and访问元素会更好second,但我不知道如何实现这种行为。

0 投票
1 回答
166 浏览

c++ - 一起使用 boost compute 和 boost::range 时,如何避免 boost::compute::zip_iterator 和 boost::iterators::zip_iterator 冲突?

我想boost::compute and boost::range一起使用,如下所示,但如果我取消注释该#include <boost/range/combine.hpp>行,我会收到一条错误消息,boost::compute::zip_iterator并且boost::iterators::zip_iterator是模棱两可的。有没有办法解决这个问题,以便我可以在同一个 cpp 文件中使用boost::compute和一起使用?boost::range我在 Windows vs2015 64bit 上使用。提升 1.67.0。

更新:我发现如果我尝试包含boost/iterator/zip_iterator.hpp而不是会发生相同的错误boost/range/combine.hpp,因此它不是特定于 Boost Range 库。

代码:

错误:

1>----- 构建开始:项目:demo,配置:Debug x64 ------ 1> demo.cpp 1> 这个头文件是实现细节并提供向后兼容性。1>C:\local\boost_1_67_0\boost/compute/algorithm/transform.hpp(67): error C2668: 'boost::compute::make_zip_iterator': 对重载函数的模糊调用 1> C:\local\boost_1_67_0\boost /compute/iterator/zip_iterator.hpp(276): 注意: 可能是'boost::compute::zip_iterator,boost::compute::buffer_iterator,boost::tuples::null_type,boost::tuples::null_type,boost ::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type>> boost: :compute::make_zip_iterator,boost::compute::buffer_iterator,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::
T=boost::compute::float4_, 1>
IteratorTuple=boost::tuples::tuple,boost::compute::buffer_iterator,boost::tuples::null_type,boost::tuples::null_type,boost::tuples ::null_type,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type> 1> ] 1> C :\local\boost_1_67_0\boost/iterator/zip_iterator.hpp(357): 注意: 或
'boost::iterators::zip_iterator,boost::compute::buffer_iterator,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type,boost ::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type>> boost::iterators::make_zip_iterator,boost::compute::buffer_iterator,boost: :tuples::null_type,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type,boost::tuples ::null_type,boost::tuples::null_type>>(IteratorTuple)' [使用参数相关查找找到] 1> with 1> [ 1> T=boost::compute::float4_, 1>
IteratorTuple=boost::tuples::tuple,boost::compute::buffer_iterator,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type, boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type> 1> ] 1> C:\local\boost_1_67_0\boost/compute/algorithm/ transform.hpp(67): 注意:在尝试匹配参数列表时 '(boost::tuples::tuple,boost::compute::buffer_iterator,boost::tuples::null_type,boost::tuples::null_type, boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type>)' 1> 与 1> [ 1>
T=boost::compute::float4_ 1> ] 1> C:\workspaces\compute_test\src\demo.cpp(45): 注意:见参考函数模板实例化'OutputIterator boost::compute::transform,boost: :compute::buffer_iterator,boost::compute::buffer_iterator,boost::compute::lambda::expression>(InputIterator1,InputIterator1,InputIterator2,OutputIterator,BinaryOperator,boost::compute::command_queue &)' 正在编译 1> 1> [ 1>
OutputIterator=boost::compute::buffer_iterator, 1>
T=boost::compute::float4_, 1>
Expr=boost::proto::exprns_::basic_expr,0>>,const boost: :compute::lambda::expression>,0>> &,const boost::compute::lambda::expression>,0>> &>,3>, 1>
InputIterator1=boost::compute::缓冲区迭代器,1>
InputIterator2=boost::compute::buffer_iterator, 1>
BinaryOperator=boost::compute::lambda::expression,0>>,const boost::compute::lambda::expression>,0>> &,const boost::compute::lambda::expression>,0> > &>,3>> 1> ] 1>C:\local\boost_1_67_0\boost/compute/algorithm/transform.hpp(68): error C2668: 'boost::compute::make_zip_iterator': 对重载函数的模糊调用1> C:\local\boost_1_67_0\boost/compute/iterator/zip_iterator.hpp(276): 注意: 可能是'boost::compute::zip_iterator,boost::compute::buffer_iterator,boost::tuples::null_type ,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type,boost ::tuples::null_type>> boost::compute::make_zip_iterator,boost::compute::buffer_iterator,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type,boost: :tuples::null_type>>(IteratorTuple)' 1> with 1> [ 1>
T=boost::compute::float4_, 1>
IteratorTuple=boost::tuples::tuple,boost::compute::buffer_iterator,boost::tuples::null_type,boost::tuples::null_type,boost::tuples ::null_type,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type> 1> ] 1> C :\local\boost_1_67_0\boost/iterator/zip_iterator.hpp(357): 注意: 或
'boost::iterators::zip_iterator,boost::compute::buffer_iterator,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type,boost ::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type>> boost::iterators::make_zip_iterator,boost::compute::buffer_iterator,boost: :tuples::null_type,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type,boost::tuples ::null_type,boost::tuples::null_type>>(IteratorTuple)' [使用参数相关查找找到] 1> with 1> [ 1> T=boost::compute::float4_, 1>
IteratorTuple=boost::tuples::tuple,boost::compute::buffer_iterator,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type, boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type> 1> ] 1> C:\local\boost_1_67_0\boost/compute/algorithm/ transform.hpp(68): 注意:在尝试匹配参数列表时 '(boost::tuples::tuple,boost::compute::buffer_iterator,boost::tuples::null_type,boost::tuples::null_type, boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type>)' 1> 与 1> [ 1>
T=boost::compute::float4_ 1> ] 1>C:\local\boost_1_67_0\boost/compute/algorithm/transform.hpp(72): error C2672: 'transform': 找不到匹配的重载函数 1>C: \local\boost_1_67_0\boost/compute/algorithm/transform.hpp(72): error C2780: 'OutputIterator boost::compute::transform(InputIterator1,InputIterator1,InputIterator2,OutputIterator,BinaryOperator,boost::compute::command_queue &) ': 需要 6 个参数 - 提供 4 个 1> C:\local\boost_1_67_0\boost/compute/algorithm/transform.hpp(55): 注意:参见 'boost::compute::transform' 的声明 ====== ==== 构建:0 成功,

1 失败,2 最新,0 跳过 ==========

0 投票
0 回答
60 浏览

c++ - Boost iterator_facade 实现

我希望熟悉 boost iterator_facade 实现的人能够阐明为什么在选择writable_postfix_increment_proxy或时使用以下元函数postfix_increment_proxy

这可以在此处找到,并在元函数postfix_increment_result中使用,该函数选择后缀运算符是否应返回代理或仅返回迭代器。其余的postfix_increment_result似乎很清楚。就像是..

如果 iter::reference 是可读的并且类别基本上等同于 input_iterator_tag 或 output_iterator_tag 则返回一个代理。

但是我很困惑is_non_proxy_reference,这似乎true与忽略 cv 限定符Reference相同。Value在这种情况下使用postfix_increment_proxy<Iterator>else writable_postfix_increment_proxy<Iterator>

什么Reference时候会成为不同的“基本类型” Value?如果您愿意,这是否支持返回您自己的代理类型?或者是其他东西?

0 投票
0 回答
67 浏览

c++ - 为什么这个涉及具有不可移动类型的 boost::transform_iterator 的代码不起作用?

这段代码的灵感来自几天前 Stack Overflow 上的另一个问题。它尝试使用一个转换迭代器来构造一个std::vector包含不可移动的类型。

不幸的是,此代码无法编译(https://wandbox.org/permlink/20xMUsCBUg44YmXC)。来自 Clang 的错误消息提到std::vector范围构造函数被禁用,因为:

no type named 'reference' in 'std::__1::iterator_traits<boost::iterators::transform_iterator<(lambda at prog.cc:22:16), std::__1::__wrap_iter<int *>, boost::iterators::use_default, boost::iterators::use_default> >'

但是我看不出为什么这个iterator_traits专业不应该有一个名为reference.