簡體   English   中英

在 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()成員 function,您可以使用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是一個簡單的計數器。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM