在C++中查找范围的长度
Finding length of range in C++
我挑战了一个范围,我需要找到其中的元素数量。我当前的代码是
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());
返回从
first
到last
的跃点数。
注意复杂性:
复杂性
线性。
但是,如果
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;
}
其中first
和last
是范围的起点和终点,n
是一个简单的计数器。
相关文章:
- 在C++中查找范围的长度
- 查找给定范围内最长连续 1 的频率
- DEV C++ 第 69 行 [错误] ISO "for" 范围更改了"i"的名称查找 [-允许]
- 检查IP是否在其他IP网络范围内,并查找下一个可用IP
- 对于多个查询,查找在 l 到 r 范围内具有相同元素的最长公共子数组
- 查找配对的匹配键范围
- 从给定范围内的向量中查找最大元素
- 如何使用C或C 查找给定的IPv6地址是否属于CIDR范围
- 为带有带前缀的字符串的容器查找相等的范围
- 使用std :: quare_range查找字符串向量中发生的前缀范围
- 用于查找范围重叠的更节省内存的算法
- 如何在向量的给定索引范围内查找最小元素
- 范围运算符需要查找 std 命名空间而不是提升
- 通过引用查找调用范围的标准引用是什么
- 查找范围内元素数量的最快方法
- 嵌套c++11范围循环,用于查找组合
- 依赖于模板参数的范围查找
- 在某个范围内查找素数时出现 Sigsegv 错误
- 给定数百万个点,查找位于直线上或距离直线0.2 mm范围内的点
- 在向量的排序向量中查找特定值的索引范围