Непосредственная ошибка в вашем коде заключается в том, что *p+1
означает (*p)+1
.
Следующая ошибка после того, как вы исправите это до *(p+1)
, будет заключаться в том, что вы удаляете один элемент от конца вектора. Вы должны сравнивать каждое значение с самым низким / самым высоким на данный момент, а не со следующим значением в векторе.
В любом случае нет такого понятия, как «низшее» или «наибольшее» комплексное число - комплексные числа не являются упорядоченным полем (теорема). Вы можете определить любой оператор сравнения для комплексных чисел, который вам нравится, но он будет довольно произвольным, например, он не обязательно будет иметь упорядоченные свойства поля, такие как a < b && c < d => a+c < b+d
. У определенного вами сравнения есть это свойство, но оно не является строгим слабым порядком, поэтому оно может вести себя не так, как вы ожидаете, если вы начнете сравнивать 3 или более значений.
Например, рассмотрим значения complex<double> a(1,1), b(0,3), c(2,2);
и функцию сравнения lt(complex<double> lhs, complex<double> rhs) { return lhs.real() < rhs.real() && lhs.imag() < rhs.imag(); }
.
Тогда lt(a,b)
и lt(b,a)
оба являются ложными. Это означает, что a
и b
эквивалентны в том, что касается порядка.
Аналогично, lt(b,c)
и lt(c,b)
оба являются ложными. Это означает, что b
и c
эквивалентны в отношении порядка.
Однако, lt(a,c)
верно. Это означает, что a
и c
не являются эквивалентными в том, что касается порядка.