正在尝试确定转换后的范围是否为空
Attempting to determine if a transformed range is empty
试图构建代码,该代码采用向量,应用视图过滤器,然后进行转换,最后返回最后一个元素(如果存在(:
int foo()
{
std::vector<int> v = {0, 1, 5, 3, 8, 9};
auto r =
v
| view::filter([] (auto i) { return i % 2 == 0; })
| view::transform([] (auto i) { return i * 2; });
return r.empty() ? 0 : r.back();
}
编译会导致以下错误:
test.cpp: In function 'int foo()':
test.cpp:14:18: error: no matching function for call to 'ranges::v3::transform_view<ran
ges::v3::remove_if_view<ranges::v3::iterator_range<__gnu_cxx::__normal_iterator<int*, std::vector<int> >, __gnu_cxx::__normal_iterator<int*
, std::vector<int> > >, ranges::v3::logical_negate_<foo()::<lambda(auto:1)> > >, foo()::<lambda(auto:2)> >::empty()'
return r.empty() ? 0 : r.back();
^
In file included from range-v3/include/range/v3/view_facade.hpp:21:0,
from range-v3/include/range/v3/core.hpp:21,
from range-v3/include/range/v3/all.hpp:17,
from test.cpp:1:
range-v3/include/range/v3/view_interface.hpp:88:28: note: candidate: template<in
t _concept_requires_87, typename std::enable_if<((_concept_requires_87 == 43) || ((ranges::v3::cardinality)-1 >= 0)), int>::type <anonymous
> > constexpr bool ranges::v3::view_interface<Derived, <anonymous> >::empty() const [with int _concept_requires_87 = _concept_requires_87;
typename std::enable_if<((_concept_requires_87 == 43) || (Cardinality >= 0)), int>::type <anonymous> = <enumerator>; Derived = ranges::v3::
iter_transform_view<ranges::v3::remove_if_view<ranges::v3::iterator_range<__gnu_cxx::__normal_iterator<int*, std::vector<int> >, __gnu_cxx:
:__normal_iterator<int*, std::vector<int> > >, ranges::v3::logical_negate_<foo()::<lambda(auto:1)> > >, ranges::v3::indirected<foo()::<lamb
da(auto:2)> > >; ranges::v3::cardinality Cardinality = (ranges::v3::cardinality)-1]
因此,看起来transform_view缺少基数概念,而不管它是在变换的向量上操作。是否有一个运算符可以应用于允许此代码工作的范围?empty()
需要基数似乎很奇怪,因为它只需要验证是否有任何元素,而不是提供确切的元素数量。
view::filter
在range-v3的旧版本中生成了InputRange
,因此不提供empty
或back
(以避免人们编写在输入视图上重复调用begin
的错误(。您需要range-v3 0.3.6或trunk,其中如果基础范围是双向的,则view::filter
是双向的。
相关文章:
- 求出有多少个数字是完美平方,而sqrt()是L,R范围内的素数
- ";结果类型必须是可从输入范围的值类型""构造的;创建std::vector时
- 重载运算符的范围是什么?它是否会影响作为类成员的集合的插入函数?
- set_intersection范围范围
- 程序中的布尔函数返回输入的范围无论如何都是无效的
- 在C++中使用变量而不是"#define"来指定数组大小是不是一种糟糕的做法?(C错误:在文件范围内
- 在 c++ 中解决段树以外的范围查询的有效方法是什么?
- 这个变量在 C++ 中的范围是什么?
- 私有在函数定义/实现的返回值范围内是什么意思 (c++)?
- 满足标准::范围::范围概念
- 向量向量的范围范围
- 为什么这个循环变量在循环范围之外是可访问的
- 运算符重载中变量的数据类型和范围应该是什么
- 统一实际分布的范围限制是多少
- 用辅助方法范围范围的问题来操纵字符串
- 用于循环范围范围
- 在C++中实现随机预言机(输出在范围内是随机的,但对于相同的输入输出是相同的)
- 在C++11中,用什么方法对数组进行简单的范围管理是最干净的
- 矢量超出范围/范围检查
- 以一种漂亮的STL方式检查一个范围是否是另一个范围的子范围