踩着迭代器

时间:2015-10-08 02:57:50

标签: c++ vector iterator

我之前asked about pointer subtraction,担心我的数组可能超过PTRDIFF_MAX个元素,允许数组中的指针减法可能溢出。一致认为,标准中没有任何内容可以阻止此类阵列,但大多数(如果不是全部)实现都可能会禁止这些阵列。

现在我很想好相反的方向,特别是vector s。我猜测我可以将任何size_t添加到一个指针,前提是我保持在其数组内(或者在其结尾之后的一个元素) - 至少,我发现没有任何建议。对于vector::iterator来说,事情似乎更复杂(这是不幸的,因为他们基本上打算成为更好的指针版本)。我可以使用任何vector索引到vector::size_type,但是vector::iterator算术运算符需要vector::difference_type,这可能会导致与上述相同的问题。这特别麻烦,因为某些vector函数需要 vector::iterator

我考虑过advance(it, N)尝试解决这个问题。不幸的是,这个函数模板的规范似乎内部不一致。我的理解是,对于非负N,这应该等同于

while(N) {
    ++it;
    --N;
}

但对于随机访问迭代器,它应该实现为:

it += N;

唉,如果N > numeric_limits<vector::difference_type>::max(),这些不等同,因为在这种情况下,前者会产生定义明确的vector::iterator(假设我们保持在vector内})而后者可能(?)产生未定义的行为。

我误解了标准吗?是否有内置的方法来有效和安全地执行vector::iterator s?

0 个答案:

没有答案