我真的很驚訝,看到std::count
返回iterator_traits<InputIterator>::difference_type
,而我的平臺上依次指long int
。爲什麼std :: count返回一個有符號的整數?
這是爲什麼?容器內的負數元素沒有任何意義。
我真的很驚訝,看到std::count
返回iterator_traits<InputIterator>::difference_type
,而我的平臺上依次指long int
。爲什麼std :: count返回一個有符號的整數?
這是爲什麼?容器內的負數元素沒有任何意義。
它實際上是一個std::ptrdiff_t
,它必須是一個有符號的整數。它必須被簽名,因爲它可以被用作兩個迭代器之間的差異,當然這可能是負面的。
+1。該死的我應該創造了一個答案,而不是一個評論......但是,是的,沒錯。 – 2013-02-11 12:19:19
所以下一個問題是,爲什麼他們使用'std :: ptrdiff_t'作爲std :: count,並在另一篇文章中回答。那謝謝啦。 – qdii 2013-02-11 12:20:58
@qdii'std :: iterator_traits
如果範圍無效,則差異將僅爲負數,並且在算法期間產生未定義的行爲。 – 2013-02-11 12:17:01
此討論可能會有所幫助:http://stackoverflow.com/questions/7505083/why-does-the-c-standard-algorithm-count-return-a-ptrdiff-t-instead-of-size-t ?answertab =活動#tab-top – Jordan 2013-02-11 12:18:13
@ChristianIvicvic,我很困惑。它是不是未定義的行爲?我的意思是,要麼檢查迭代器邊界,並且在錯誤時返回負值,要麼是未定義的行爲,然後返回的是未定義的。 – qdii 2013-02-11 12:19:35