迭代器(向量或字符串)减去 n (iter - n) for c++

Iterator(of a vector or string) minus n (iter - n) for c++

我的问题的一些详细描述:

  1. 在 C++ 11 中创建向量或字符串的迭代器。
  2. 做迭代器运算,迭代器减n

问题:C++ 11 会保持迭代器负 n 大于 begin() 吗? (如果n足够大,编译器会保证iter-n不超过iterator的合法范围吗?)

根据 cppreferenceiter - n 实际上等同于:

vector<T>::iterator temp = iter;
while(n--) --temp;
return temp;

假设 iter 是来自名为 containervector 的迭代器。如果 n 大于 distance(container.begin(), iter),那么在最后一个 while 循环的某个时刻,--temp 将等同于:

--container.begin();

并且根据 cppreference,该行将是未定义的行为。

由于迭代器无法获知起源容器的任何信息,因此无法检测当前是否为container.begin(),因此如果不手动检查则无法确保其保持在合法范围内反对范围。

不,迭代器算法不会对结果进行任何边界检查。您很容易得到一个无效的迭代器。

std::vector 给出的随机访问迭代器将允许您进行减法,因此您可以实施自己的边界检查。

it2 = it - min(n, it - container.begin());

它不会,它只会执行算术运算并打印负数的值。

使用 VSCode 执行代码。

#include<conio.h>
#include<iostream>
#include<vector> 
using namespace std;

int main(){
    vector<int> v = {1,2,3,4,5,6};
    vector<int> :: iterator it;

    for(it=v.begin();it!=v.end();it++)
        cout<<*it-6<<endl;

return 0;
}

结果是:

 -5
 -4
 -3
 -2
 -1
  0