在 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;});
但我觉得有点矫枉过正,好像不太对。
我想知道是否有更好的系统方法可以在不定义额外变量的情况下实现这一目标?
在 C++ 中,所有 containers 实现具有恒定复杂度的 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
是一个简单的计数器。
你可以用std::distance
喜欢
std::distance(range.begin(), range.end());
Returns the number of hops from first
to last
.
并注意复杂性:
Complexity
Linear.
However, if InputIt
additionally meets the requirements of
LegacyRandomAccessIterator,
complexity is constant.
如果(出于某种原因)您的范围没有 size()
成员函数,您可以使用 std::distance
。这应该始终有效,因为范围需要有开始和结束迭代器。
std::distance(cbegin(range), cend(range));
我违抗了一个范围,我需要找到其中的元素数量。我当前的代码是
size_t c = 0;
for(auto elem : range){
c++;
}
return c;
但是,编译器抱怨未使用的变量 elem
,我无法摆脱它。我虽然想用
std::count_if(range.begin(), range.end(), [](type elem){return ture;});
但我觉得有点矫枉过正,好像不太对。
我想知道是否有更好的系统方法可以在不定义额外变量的情况下实现这一目标?
在 C++ 中,所有 containers 实现具有恒定复杂度的 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
是一个简单的计数器。
你可以用std::distance
喜欢
std::distance(range.begin(), range.end());
Returns the number of hops from
first
tolast
.
并注意复杂性:
Complexity
Linear.
However, if
InputIt
additionally meets the requirements of LegacyRandomAccessIterator, complexity is constant.
如果(出于某种原因)您的范围没有 size()
成员函数,您可以使用 std::distance
。这应该始终有效,因为范围需要有开始和结束迭代器。
std::distance(cbegin(range), cend(range));