问题标签 [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++ - 使用带有升压范围适配器的 STL 容器时出现 value_type 错误
我一直在尝试了解升压范围适配器的使用,但我发现的所有工作示例仅使用具有原始类型的 STL 容器,std::list<int>
并且尝试使用我自己的类会使一切崩溃。
使用 gcc 4.6/4.8 和 boost 1.48/1.54/trunk 我得到以下编译错误:
尽管我按照对此的答案进行了定义,但我了解问题decltype
以及result_of
可能导致问题的问题。但是,我不明白为什么我不能将仿函数结构传递给我的班级,或者我的班级是否有其他要求。transformed
BOOST_RESULT_OF_USE_DECLTYPE
filtered
Thing
c++ - 测试对象是否与升压范围兼容的元函数
是否有,或者您将如何编写一个测试类是否兼容的元函数类boost::range
?我想使用boost::enable
成语,比如
以获得适当的is_range_compatible
元功能。我从 pretty_print 中了解is_container,它捕获了很多案例,但不是所有适用于boost::range
.
编辑这是使用 C++03,所以我无权访问 C++11 功能。我正在使用旧的 gcc 4.1 和 boost 1.51。
c++ - 如何声明提升范围适配器(例如 map_values)
说我有
在 MyClass 方法中,我有一种非常方便的方法来遍历 my_map 的值,方法是说
但是我想要一个 MyClass 的方法,它基本上会输出 my_map | boost::adaptors::map_values 并允许在 MyClass 方法之外方便地进行值迭代。如何声明这样的方法?我需要实现某种伪容器和相应的迭代器还是有捷径?
c++ - Boost-range 不适用于 C++1y 初始化捕获可变 lambda
我想使用Boost.Range和C++1y lambda 和 init-capture计算两个向量的元素差异。减去一个向量的固定(即第一个)元素的更简单的情况是有效的。但是,当我尝试通过在第二个范围内增加迭代器(并使 lambda mutable)来计算“矢量化差异”时,会出现编译器错误。示例代码(请注意,我没有使用通用 lambda,因此 g++ 4.8 和 Clang SVN 都可以解析此代码):
活生生的例子。这里 g++ 和 Clang 都抱怨
'boost::mpl::eval_if, boost::result_of]::__lambda1(const int&)>, boost::mpl::identity >::f_ {aka struct boost::result_of] 中没有名为 'type' 的类型: :__lambda1(const int&)>}' typedef typename f_::type type;
问题:发生了什么事?
c++ - 为什么 Boost.Range is_sorted 不需要前向迭代器?
C++11 算法std::is_sorted
和std::is_sorted_until
两者都需要ForwardIterator
s。但是,Boost.Range 版本boost::is_sorted
只需要SinglePassRange
对应于InputIterator
s 的 s。特别是,它委托给一个基于迭代器的实现,如下所示:
在这里,我们看到在迭代器增量*first
之后发生的迭代器取消引用。++it
这意味着Iterator
应该将ForwardIterator
其作为所需的类别。为什么?因为标准在
24.2.3 输入迭代器 [input.iterators]/p2(见表 107 行 about ++r
)
post: 之前值 of 的任何副本
r
不再需要是可解引用的或在==
.
注意:这并不是要“通过单个示例进行证明”,但似乎任何基于比较的算法(例如adjacent_find
)都必须需要前向迭代器才能在两个迭代器之间进行比较。
问题:为什么 Boost.Range 版本is_sorted
不需要更强的概念ForwardRange
(以及ForwardIterator
它的低级例程)std::is_sorted
?它是 Boost.Range 中的错误吗?
c++ - 为什么 Boost.Range range_begin/end 自由函数对 const 和非 const 引用都进行了重载?
我在Boost.Range中发现了这个有趣的部分:
在提供独立功能range_begin/end()
时,文档声明:
...
range_begin()
并且range_end()
必须为两个const
和mutable
引用参数重载。
事实上,查看它们在 中的默认值end.hpp
,我们看到:
您会注意到(文档中给出的示例也这样做)两个版本都返回相同的Iterator
类型。
为什么我们首先需要两个重载?是为了让ADL工作吗?
c++ - `end()` 实际上表示过去结束的输入迭代器示例?
我目前正在尝试理解一些想法。C ++迭代器,我一直在想......
给定一个Incremental / Single Pass / Input / Output Iterator,是否真的存在这样一个迭代器的一个过去的位置/元素,或者所有 InputIteratorend()
迭代器“自然地”某种形式的奇异值受到特殊待遇operator==
?
我想我的意思是:对于“向上”的ForwardIteratoroperator==
中的任何内容,有一个简单的方法来检查两个迭代器对象是否指向同一个元素,而不管end
-ness 是否指向同一个元素,这是完全有意义的。这对 InputIterator 有意义吗?
c++ - boost::transform() 仅当添加的值不为 NULL 时?
我有以下代码:
m_triggers
是触发对象的指针向量:
如果调用CTriggerController::GetTrigger()
返回 NULL(这意味着找不到该名称的触发器),我不想将任何内容推送到我的m_triggers
向量。
有没有一种直接的方法可以通过对我上面的代码进行一些小的修改来做到这一点?
我在 MSVC9 上使用 Boost 1.55.0(仅限 C++03)
c++ - Boost过滤适配器编译
我遇到了问题boost::adaptors::filtered
。有一个用于演示问题的示例
不幸的是,我有
这种行为的原因是什么以及如何解决它?
c++ - 使用 boost::range::join() 组合范围
我想遍历几个文件的行。所以我做了一个line_iterator
,然后尝试将它与boost::range::join
:
但是我收到错误“错误:'class line'中没有名为'iterator_category'的类型”(下面的完整错误)。我认为这是因为join
需要知道这是否是 forward/bidi/etc 迭代器,但是如何添加iterator_category
到我的line
类中?