Комментарий (теперь удаленный) в вопросе гласил, что «для итератора нет оператора». Однако следующий код компилирует и работает в MSVC
и clang-cl
со стандартным значением C++17
или C++14
:
#include <iostream>
#include <vector>
int main()
{
std::vector<float> X{ 1.1f, 2.2f, 3.3f, 4.4f, 5.5f, 6.6f };
for (auto f : X) std::cout << f << ' '; std::cout << std::endl;
std::vector<float>::iterator d = X.end();
X.erase(d - 3, d); // This strongly suggest that there IS a "-" operator for a vector iterator!
for (auto f : X) std::cout << f << ' '; std::cout << std::endl;
return 0;
}
В приведенном определении поскольку operator-
выглядит следующим образом (в заголовке <vector>
):
_NODISCARD _Vector_iterator operator-(const difference_type _Off) const {
_Vector_iterator _Tmp = *this;
return _Tmp -= _Off;
}
Однако я определенно не юрист по языку C ++, и возможно, что это один из тех 'опасных Расширения Microsoft. Мне было бы очень интересно узнать, работает ли это на других платформах / компиляторах.