为什么我无法获得范围 v3 中范围的大小?
Why couldn't I get the size of a range in range-v3?
我想得到名字以"T"开头的人数:
#include <iostream>
#include <string>
#include <rangev3all.hpp>
using namespace ranges;
int main()
{
const auto names = std::vector<std::string> {"Tony", "Peter"};
std::cout << size(names | view::filter([](const auto& s) {return s[0] == 'T';}));
}
但是我遇到了巨大的编译错误:
λ clang -std=c++14 test.cpp
test.cpp:11:18: error: no matching function for call to object of type 'const ranges::v3::adl_size_detail::size_fn'
std::cout << size(names | view::filter([](const auto& s) {return s[0] == 'T';}));
^~~~
K:Program Files (x86)Microsoft Visual Studio 14.0VCincluderange/v3/size.hpp:90:32: note: candidate template
ignored: substitution failure [with Rng =
ranges::v3::remove_if_view<ranges::v3::iterator_range<std::_Vector_const_iterator<std::_Vector_val<std::_Simple_types<std::basic_string<char,
std::char_traits<char>, std::allocator<char> > > > >,
std::_Vector_const_iterator<std::_Vector_val<std::_Simple_types<std::basic_string<char, std::char_traits<char>,
std::allocator<char> > > > > >, ranges::v3::logical_negate<(lambda at test.cpp:11:44)> >]: no matching function
for call to 'size'
constexpr auto operator()(Rng &&rng) const ->
^
K:Program Files (x86)Microsoft Visual Studio 14.0VCincluderange/v3/utility/iterator.hpp:405:32: note: candidate
function template not viable: requires 2 arguments, but 1 was provided
iterator_size_t<I> operator()(I begin, S end) const
顺便说一下,我在Visual Studio 2015 Update 1中使用了clang 3.7。那么,出了什么问题呢?
使用 distance
,而不是 size
。后者适用于可以在恒定时间内检索其大小的范围。
你
最好使用count_if
算法。
auto cnt = ranges::count_if( names, [](const auto& s) {return s[0] == 'T';} )
相关文章:
- 范围 v3 可以包含初始值设定项列表的工作吗?
- 使用范围 v3 操作基础范围
- 如何从未知视图中声明范围::v3::View 变量
- 如何使用范围-v3压缩矢量的矢量
- 范围 v3 的和向量
- 我可以管道到范围 v3 累积吗?
- 使自定义范围 v3 视图可管道化
- C++范围 - v3 概念::valid_expr 检查,带有尾随", 42"
- 使用范围 v3 进行转换
- 如何从范围 v3 的istream_range中检索文件大小?
- 范围的递归函数(从范围 v3 开始)导致编译发散:为什么
- 为什么我无法使用范围 v3 反转分割范围?
- 提升::范围 V3 中的counting_iterator模拟
- 为什么在此示例中,范围 v3 比 STL 慢?
- C 范围V3:试图将链条链在一起转换
- 使用范围V3视图来实现begin()/end()方法
- 范围V3使序列变平
- 如何使用范围 v3 创建view_facade
- 如何将标准::字符串拆分为标准::string_views的范围 (v3)
- 范围-v3 如何操作::使用分隔符连接