问题标签 [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.
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 命名空间中的任何代码,或任何其他方式。
c++ - Why is ADL not working with Boost.Range?
Considering:
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)
.
c++ - 提升范围 for_each、bind、copy 和 back_inserter 的组合失败
我想将包含的所有整数复制a
到b
.
它看起来很简单。我想要一个兼容 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 个
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)我如何解决它?
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
界面可以完全回避这个问题。显然,必须扫描输入范围以找到每个组的开头,但我希望有一种可靠的方法来做到这一点,而无需无缘无故地重新扫描元素。(稳健我的意思是只要底层输入范围的迭代器有效,当然不会在扫描期间使迭代器无效。)
那么..有一些已知/经过验证/优雅的解决方案吗?
c++ - 如何使用 boost :: 适配器链的 boost 范围获取 std::list
我想完成以下功能
我想用boost::adaptors链应该怎么做
代替
但是应用vs2010编译报错:
怎么解决?顺便不能用c++0x lambda,谢谢
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 报告几乎相同):
gcc - GCC 与 clang 优化器的哪些差异导致此代码未优化?
如果我编译以下代码:
使用 clang 3.9.0 和 GCC 6.3.0 at -O1
,我得到了 GCC 的完全优化(只返回最终结果)和大量的 clang 输出代码。请参阅GodBolt 上的这个实验。但是,如果我将 clang 切换到-O2
,它也会编译所有内容。
两种编译器模式之间的优化差异-O1
会导致这种情况发生吗?
c++ - 如何提升::range::sort() 一个 boost::transformed_range?
我想从一个vector<foo>
基于foo
. 我boost::adaptors::transform
用来选择成员,然后排序,然后使用boost::adaptors::unique
. 我无法让排序步骤正常工作。暂且不谈unique
,我在Coliru上尝试了以下代码。
该#if
部分不起作用:
而该部分中std::sort
的基本迭代器类型#else
确实有效。我不明白为什么。在我的实际用例中,我也在使用boost::adaptors::indirect
and boost::adaptors::filter
(我更愿意在进行排序之前进行过滤,或者至少尝试这样做并查看它的执行情况),这就是为什么我不简单地words
排序进行转换之前的 lambda 谓词。
c++11 - boost::range::结合重复参数
我想将其boost::range::combine
用作笛卡尔幂,而不是仅用作产品。
因此,不要写这样的表达式,而是boost::range::combine(myRange, myRange, myRange);
写类似myCombine(myRange, 3);
.
如何实施?