![](/img/trans.png)
[英]warning using std::accumulate(v.begin(), v.end(), 0);
[英]What is the outcome of std::distance(v.begin(), v.end()) when v is bigger than INT_MAX?
考慮以下代碼:
std::vector<char>::size_type size = static_cast<std::vector<char>::size_type>(std::numeric_limits<std::vector<char>::difference_type>::max()) + 1;
std::vector<char> v(size);
std::vector<char>::difference_type diff = std::distance(v.begin(), v.end());
其中size_type與size_t (unsigned int)相同, difference_type與ptrdiff_t (signed int)相同。
如果向量的大小大於difference_type的限制, std :: distance函數會返回負值嗎?
對於隨機訪問迭代器類型, distance(a,b)
定義為ba
。 減法隨機訪問迭代器有一個前提條件:
pre:存在類型
difference_type
的值n
,使得a + n == b
。
因此,如果向量大小對於difference_type
來說太大,那么你打破了這個前提條件,給出了未定義的行為(可能是否定結果;也許是別的東西)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.