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

Finding length of range in C++

本文关键字:范围 查找 C++      更新时间:2023-10-16

我挑战了一个范围,我需要找到其中的元素数量。我当前的代码是

size_t c = 0;
for(auto elem : range){
c++;
}
return c;

然而,编译器一直在抱怨未使用的变量elem,我无法摆脱它

std::count_if(range.begin(), range.end(), [](type elem){return ture;});

但我觉得这太过分了,而且似乎不对。

我想知道是否有一种更好的系统方法可以在不定义额外变量的情况下实现这一点?

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

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

您可以像一样使用std::distance

std::distance(range.begin(), range.end());

返回从firstlast的跃点数。

注意复杂性:

复杂性

线性。

但是,如果InputIt另外满足LegacyRandomAccessIterator,复杂性是恒定的。

在C++中,所有容器都实现了具有恒定复杂性的size方法,因此如果通过range考虑容器,则不需要重新设计轮子。

但是,如果您想确定某个范围内的元素数量,也可以使用std::distance,例如:

std::vector<int> v{ 3, 1, 4 };
std::cout << std::distance(v.begin(), v.end() << std::endl; // 3

如果你看看std::distance的可能实现,它有点像

while (first != last) {
++first;
++n;
}

其中firstlast是范围的起点和终点,n是一个简单的计数器。