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

c++ - how to create an adaptor that will return map values based on filtered key using a predicate for key

How to create a adaptor that will return map values based on filtered key using a predicate for key?

As an example:

0 投票
1 回答
1548 浏览

c++ - 过滤范围、lambda 和 is_sorted

这是我使用过滤迭代器时遇到的问题的精简版本(因此要求我以不同的方式重写它以避免过滤器是没有意义的)。奇怪的是,在真正的代码中is_sorted似乎只有问题,其他用途似乎工作正常。

这无法使用 Clang++ 3.5 和 G++ 4.9 编译(在 Mac OS X 上,最新):

我知道将我的 lambda 存储在一个std::function修复它的地方,但我想避免付出代价。使用自定义包装器std::is_sorted并不能解决问题。这个问题似乎与其他问题有关(例如,boost transform iterator 和 c++11 lambda),但事实并非如此——至少它们的解决方法不适用于这里。

谢谢!

0 投票
1 回答
241 浏览

c++ - boost::transformed with tuple functor 给出了奇怪的警告

我为元组 std::get 编写了一个方便的函子包装器。将它与 boost 转换和 operator[] 一起使用时,我收到警告说我正在返回对本地临时对象的引用。我的系统:ubuntu 14.04,编译器:clang-3.5 和 g++-4.8.2,boost 版本:1.56。

警告详情:

添加标志 -Wreturn-stack-address 不是解决方案,因为它在更大的项目中很危险。

我注意到删除 const 关键字可以消除警告,但我不知道为什么,也不想假设仿函数只获得非常量范围。

问题:如何修复代码以消除警告?为什么删除 const 会摆脱警告?

0 投票
1 回答
130 浏览

c++ - 在循环中附加范围

我想将函数返回的范围连接成一个大范围。考虑以下代码:

我要实现
的目标: aaa 向量很大, foo 可能会返回很大的范围。当然,我可以将范围内所有元素的副本创建到新的整数向量中并返回它。它效率低下,浪费内存和时间。所以我想返回一个 boost::joined_range。在最坏的情况下,我可以使用范围向量,但它太简单而且不那么优雅:) 除了joined_range 不是默认可构造的(这对于这个示例实现来说是一个问题)返回值类型是什么?临时变量(ccc)类型以及实现上述目标的正确和优雅的方法是什么?

0 投票
2 回答
195 浏览

c++ - boost::any_range 和运算符 []

考虑以下代码:

如果取消注释最后一行,则代码将失败,因为distance_to没有为any_forward_iterator_interface. 我不确定我在这里究竟缺少什么,比如实施operator[]还是distance_to为了什么?我自己的版本遍历标签?为什么它首先不起作用?

科利鲁版

0 投票
2 回答
424 浏览

c++ - boost multi_index_container, range mutating algorithms and constness

I'm using boost multi_index_container, which is queried by equal_range and the result returned from the function using range::join and boost::any_range
The any_range Reference argument is defined as const reference to the type - must be const because of the multi_index_container nature, not quite sure about the reference. Example:

Now what I need is to use mutating range algorithms like boost::sort, unique, etc., which obviously cannot run on range because of the constness of elements in range.
Is it any workaround except copying elements into new container?

EDIT 1:
struct and MIC example:

0 投票
4 回答
384 浏览

c++ - 提升 multi_index_container 和慢操作员++

这是这个 MIC question的后续问题。在将项目添加到引用包装器的向量时,无论我选择哪种迭代方法,我都会在 ++ 运算符中花费大约 80% 的时间。
查询工作如下

我尝试了以下方法来填充参考包装

无论我做什么,我都会为运算符 ++ 或只是增加迭代器的 size 方法付费——这意味着我仍然停留在 ++ 中。所以问题是是否有一种方法可以更快地迭代结果范围。如果没有这样的方法,是否值得尝试执行 equal_range 添加新参数,该参数保存对 reference_wrapper 容器的引用,该容器将填充结果而不是创建范围?

编辑 1:示例代码 http://coliru.stacked-crooked.com/a/8b82857d302e4a06/
由于这个错误,它不会在 Coliru 上编译
编辑 2:调用树,时间花在运算符 ++
调用树 热路径 编辑3:一些具体的东西。首先,我没有启动这个线程只是因为 operator++ 在整体执行时间上花费了太多时间,而且我不喜欢它只是“因为”但此时它是我们性能测试的主要瓶颈。每个请求通常在数百微秒内处理,与此类似的请求(它们稍微复杂一些)处理约 1000-1500 微秒,仍然可以接受。最初的问题是,一旦数据结构中的项目数量增长到数十万,性能就会下降到大约 20 毫秒。现在,在切换到 MIC(这极大地提高了代码的可读性、可维护性和整体优雅性)之后,我可以达到每个请求大约 13 毫秒的时间,其中 80%-90% 花费在 operator++ 上。现在的问题是这是否可以以某种方式改进,还是我应该为我寻找一些焦油和羽毛?:)

0 投票
2 回答
300 浏览

c++ - boost::adaptors::strider 不能在 boost::adaptors::transformed 之后使用?

以下内容无法在 Visual Studio 2010 上编译:

编译器抱怨(错误消息最初是德语,我的翻译):

我正在使用 Boost 1.57。

显然operator |试图strided_range用错误的Category模板参数值构造一个?

这是一个错误,还是我做错了什么?

0 投票
1 回答
1067 浏览

c++ - 如何使用 boost::any_range 加入多个提升范围并从函数中返回结果

例子:


可以说,为简单起见, m_someDataContainer 和 bar 类定义如下:

问题是:如何确定 foo() 的返回类型以及如何在不使用 boost::any_range 的情况下加入这些范围

EDIT1:看起来这是不可能的,在以前的连接值上调用join in loop会使结果类型成为joined_range的joined_range的嵌套类型...

0 投票
1 回答
1195 浏览

c++ - 是否存在与查看成员函数/变量的等价物?

Streams 库有一个简洁的map功能,可以通过成员函数查看范围。Range-V3中是否有任何等效视图?

view::transform是唯一的选择吗?