Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
operator>?Смысл сложения 2-х итераторов? Что в результате? Вычитание же не обделено смыслом.
§ 24.2.1
An iterator j is called reachable from an iterator i if and only if there is a finite sequence of applications of the expression ++i that makes i == j. If j is reachable from i, they refer to elements of the same sequence.
§ 24.2.5
The domain of == for forward iterators is that of iterators over the same underlying sequence.Во-вторых, меня заинтересовал вопрос равенства итераторов. Исходя из определения, итератор должен обеспечивать доступ к элементам коллекции. Т. е. если два итератора принадлежат разным коллекциям, кэп подсказывает, что сравнивать их вообще нельзя.
$ cat /tmp/zzz.c
#include <stdio.h>
#include <stdlib.h>
int main() {
int *p = (int*)malloc(sizeof(int));
int *q = (int*)realloc(p, sizeof(int));
*p = 1;
*q = 2;
if (p == q)
printf("%d %d\n", *p, *q);
}
$ ./Release/bin/clang -O3 /tmp/zzz.c
$ ./a.out
1 2А вот что может быть: malloc() и realloc() по стандарту возвращает указатель на новый объект, который отличается от остальных указателей
Так быть не может никогда.
Two pointers of the same type compare equal if and only if they are both null, both point to the same function, or both represent the same address (3.9.2).
A valid value of an object pointer type represents either the address of a byte in memory (1.7) or a null pointer (4.10).
Every byte has a unique address.
И снова нет! Он определён в случае если два указателя указывают в один и тот же объект.
Но это не важно, вы-то говорили про строгое равенство:
> Они могут оказаться равными даже если указывают на разные области памяти.
Интересная логика Random access итераторов в STL контейнерах