考虑以下代码:
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 相同(签名int)。
如果向量的大小大于 difference_type 的限制, std :: distance 函数会返回负值吗?
答案 0 :(得分:4)
对于随机访问迭代器类型,distance(a,b)
定义为b-a
。减去随机访问迭代器有一个前提条件:
之前:
n
类型的difference_type
值为a + n == b
。
因此,如果矢量大小对于difference_type
来说太大,那么你就打破了这个前提条件,给出了未定义的行为(可能是否定的结果;也许还有别的东西)。