2016-03-25 1 views
0

Я читаю чужой код, и я вижу что-то вроде этого:с ++ станд рода с одинаковыми аргументами

sort(myvec.begin(), myvec.begin()); 

Я написал код, чтобы проверить это, и это, кажется, сделать то же самое, как

sort(myvec.begin(), myvec.end()); 

Действительно ли они делают то же самое? Это задокументировано? Есть ли способ понять, почему, или это был произвольный выбор, чтобы реализовать его таким образом?

Update после ответов

Да, это не не-оп. У моего тестового кода была ошибка.

+0

В первом случае, 'станд :: sort' не должны ничего делать. – Mahesh

ответ

4

Код

sort(myvec.begin(), myvec.begin()); 

должно быть не оп, так как это пустой диапазон. Код

sort(myvec.begin(), myvec.end()); 

будет сортировать все содержимое myvec. Если это случится, чтобы сделать то же самое, это означает, что ваш вектор уже отсортирован. Первая строка - это почти наверняка опечатка или ошибка, ожидающая появления.

1

Итераторы - это всего лишь способ определения диапазона. У вас должна быть плохая интуиция, если вы даже подумали, что этот код может работать правильно. Что делать, если мы использовали метод, который принимает 2 индекса -> begin index той части отсортированного вектора и индекс, указывающий ее конец. Будет ли sort(0, myvec.size()) и sort(0, 0) эквивалентны?

Этот код должен быть бесспорно sort(myvec.begin(), myvec.end());

Смежные вопросы