C++ 在C+中查找范围长度+;

C++ 在C+中查找范围长度+;,c++,range,c++14,std,counting,C++,Range,C++14,Std,Counting,我已经定义了一个范围,我需要找到其中元素的数量。我现在的代码是 size_t c = 0; for(auto elem : range){ c++; } return c; 然而,编译器正在抱怨未使用的变量elem,我无法摆脱它。我想用类似的东西 std::count_if(range.begin(), range.end(), [](type elem){return ture;}); 但我觉得这太过分了,而且似乎不对 我想知道在没有定义额外变量的情况下,有一种更为系统的方法来实

我已经定义了一个范围,我需要找到其中元素的数量。我现在的代码是

size_t c = 0;
for(auto elem : range){
     c++;
}
return c;
然而,编译器正在抱怨未使用的变量
elem
,我无法摆脱它。我想用类似的东西

std::count_if(range.begin(), range.end(), [](type elem){return ture;});
但我觉得这太过分了,而且似乎不对

<>我想知道在没有定义额外变量的情况下,有一种更为系统的方法来实现这一点吗?

< p>在C++中,所有的实现都是一个常数复杂的代码<代码>大小>代码>,因此如果通过代码>范围< /代码>,考虑容器,则有“强>不需要< /强>用于重新创建车轮。< /P> 但是,如果要确定某个范围内的元素数,也可以使用,如:

std::向量v{3,1,4};
std::cout您可以使用like

返回从
第一次
最后一次
的跳数

请注意复杂性:

复杂性

线性的

但是,如果
input
另外满足 , 复杂性是恒定的

如果(出于某种原因)您的范围没有
size()
成员函数,您可以使用。这应该总是有效的,因为需要一个范围来有一个开始和结束迭代器

std::distance(cbegin(range), cend(range));

是否有
范围.size()
?哪种类型是
范围
?值得注意的是,基于范围的for循环可用于满足容器特性的类型以外的其他类型。唯一的要求是类型定义了
begin()
end()
,因此使用
std::distance
发布的答案更通用。std::distance不起作用。编译器消息:模板参数/替换失败。错误:在“struct std::iterator_traits”中没有名为“difference_type”的类型@narekBojikian您的迭代器需要定义自己的
差异类型。如果无法更改范围的代码,那么只需使用一个简单的非范围for循环
for(auto i=range.begin();i!=range.end();i++)c++我可以更改我自己实现的代码。但是“差异类型”应该是什么样子呢?@narekBojikian你可以阅读关于这些类型的文章。对于
difference\u type
您需要一个有符号整数。您可以使用distance\u type=long将其声明为
在迭代器类中。我还有另一个问题。开始迭代器和结束迭代器的类型不同。end只是一个“空类型”,它触发begin中的内部测试,以内部测试是否有更多的元素需要迭代。std::distance期望两者为同一类型。你认为我不必修改迭代器就能克服这个问题吗?(它将与迭代器或“空类型”的包装器一起工作,但我正在寻找更优雅的东西
std::distance(cbegin(range), cend(range));