问题标签 [boost-range]

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 回答
2486 浏览

c++ - 使用 gcov 忽略或排除外部库中的代码

我正在开发一个使用几个 boost 库的项目。在查看我们的测试报告时,我们发现测试覆盖率信息有时确实适合我们的源代码。我能够追踪到 boost::range。我认为这是因为库中的一些静态初始化,尽管我不能说更具体的东西。

基本上,如果你用 编译下面的代码gcc --coverage,运行它并用 打印覆盖率报告gcov -b,将会有四个额外的分支和一个额外的行,我想忽略它们。

覆盖率报告是: 执行的行:5 个分支的 100.00% 执行的分支:4 个的 100.00% 至少执行一次:4 个执行的调用的 50.00%:2 个的 100.00% 创建 'test_gcov.cpp.gcov'

我猜想 5 行的计数来自 boost::range 库中的两个函数签名、函数体和另外一行。我不知道具体在哪里,但是生成的 gcov 文件显示正在进行一些静态初始化,所以我猜那是分支所在的位置。

我想知道是否有办法告诉 gcov 忽略 boost 命名空间中的任何代码,或任何其他方式。

0 投票
3 回答
1073 浏览

c++ - Why is ADL not working with Boost.Range?

Considering:

Live Clang demo Live GCC demo

this gives:

main.cpp:8:37: error: use of undeclared identifier 'end'

Considering that if you write using boost::end; it works just fine, which implies that boost::end is visible:

Why is ADL not working and finding boost::end in the expression end(range)? And if it's intentional, what's the rationale behind it?


To be clear, the expected result would be similar to what happens in this example using std::find_if and unqualified end(vec).

0 投票
1 回答
315 浏览

c++ - 提升范围 for_each、bind、copy 和 back_inserter 的组合失败

我想将包含的所有整数复制ab.

它看起来很简单。我想要一个兼容 C++ 98 的一个班轮。

为什么不编译?我有一长串关于 的错误boost::bind,我不明白,而且它有好几页。

错误开始于:

错误 C2780: 'boost::_bi::bind_t<_bi::dm_result::type,boost::_mfi::dm,_bi::list_av_1::type> boost::bind(MT::* ,A1)' :需要 2 个参数 - 提供 3 个

0 投票
1 回答
135 浏览

c++ - boost::adaptor::filtered core dumps with boost::range_detail::default_constructible_unary_fn_wrapper "Assertion `m_impl' failed"

boost::range_detail::default_constructible_unary_fn_wrapper运行此代码时,内部出现断言失败。断言似乎是在检查函子是否已在过滤器对象内初始化。

我可以通过 coliru 使用的任何版本的 boost 以及 1.60 得到这个。

转载于 coliru这里

你能帮我理解a)这里发生了什么,b)我如何解决它?

0 投票
0 回答
242 浏览

c++ - 是否有与 Haskell 的 groupBy 等效的惯用、高效的 C++?

我正在尝试使用 Boost.Range 处理输入序列。该库还有很多不足之处,因此我必须自己编写一些额外的范围适配器。它们中的大多数都很简单,但是当我尝试实现等效于 Haskell 的 groupBy(或 range-v3 的 group_by_view)时,我遇到了一些困难。这是一个转换,它接受一个输入范围并返回一个范围范围,每个范围都包含来自输​​入的一系列相邻元素,这些元素满足某些给定的二元谓词。例如,如果二元谓词是 simple std::equal_to<int>(),则序列

将映射到

我的问题是这个适配器的接口。认为

如果i递增,则必须扫描底层序列,直到找到 2。但是,如果我首先扫描*i(即 range {1, 1}),我基本上已经找到了第一组的末尾,因此由 引起的遍历++i将是多余的. 可能有一些从内部迭代器到外部迭代器的反馈路径,即i从内部迭代器到达的最后一个元素开始扫描,但这会导致大量开销,并有创建悬空迭代器的风险。

我想知道是否有一些惯用的方法来处理这个问题。理想情况下,重新定义grouped_by界面可以完全回避这个问题。显然,必须扫描输入范围以找到每个组的开头,但我希望有一种可靠的方法来做到这一点,而无需无缘无故地重新扫描元素。(稳健我的意思是只要底层输入范围的迭代器有效,当然不会在扫描期间使迭代器无效。)

那么..有一些已知/经过验证/优雅的解决方案吗?

0 投票
1 回答
392 浏览

c++ - 如何使用 boost :: 适配器链的 boost 范围获取 std::list

我想完成以下功能

我想用boost::adaptors链应该怎么做

代替

但是应用vs2010编译报错:

怎么解决?顺便不能用c++0x lambda,谢谢

0 投票
1 回答
97 浏览

c++ - 为什么 adl 更喜欢 'boost::range_detail::operator|' 在本地“运营商|”之上?

我正在尝试operator|为我的模板类编写一个boo并且一切正常,直到模板类是提升范围类型 - 就像在示例中一样boost::range::filter_range- adl 更喜欢boost::range_detail::operator|(SinglePassRange& r, const replace_holder<T>)本地类。

谁能解释为什么 adl 更喜欢从提升这个详细的命名空间而不是本地命名空间的重载?

}

clang 错误(msvc 报告几乎相同):

0 投票
0 回答
198 浏览

gcc - GCC 与 clang 优化器的哪些差异导致此代码未优化?

如果我编译以下代码:

使用 clang 3.9.0 和 GCC 6.3.0 at -O1,我得到了 GCC 的完全优化(只返回最终结果)和大量的 clang 输出代码。请参阅GodBolt 上的这个实验。但是,如果我将 clang 切换到-O2,它也会编译所有内容。

两种编译器模式之间的优化差异-O1会导致这种情况发生吗?

0 投票
1 回答
1233 浏览

c++ - 如何提升::range::sort() 一个 boost::transformed_range?

我想从一个vector<foo>基于foo. 我boost::adaptors::transform用来选择成员,然后排序,然后使用boost::adaptors::unique. 我无法让排序步骤正常工作。暂且不谈unique,我在Coliru上尝试了以下代码。

#if部分不起作用:

而该部分中std::sort的基本迭代器类型#else确实有效。我不明白为什么。在我的实际用例中,我也在使用boost::adaptors::indirectand boost::adaptors::filter(我更愿意在进行排序之前进行过滤,或者至少尝试这样做并查看它的执行情况),这就是为什么我不简单地words排序进行转换之前的 lambda 谓词。

0 投票
1 回答
393 浏览

c++11 - boost::range::结合重复参数

我想将其boost::range::combine用作笛卡尔幂,而不是仅用作产品。

因此,不要写这样的表达式,而是boost::range::combine(myRange, myRange, myRange);写类似myCombine(myRange, 3);.

如何实施?