[英]Idiomatic C++ for finding a range of equal length strings, given a vector of strings (ordered by length)
[英]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()
成員 function,您可以使用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
是一個簡單的計數器。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.