arr1, arr2, idx; { using std::swap; swap(arr1[idx], arr2[idx]); }
а обьясните потом ему зачем нужен этот юзинг?
Что бы не писать пространство имен std перед функцией swap явно в этом файле каждый раз.
Вы же не уверены в этом ответе, правда?
Например, вот так, только для nonstd::vector https://en.cppreference.com/w/cpp/container/vector/swap2
Я не правильно сказал? Чтобы вместо std::swap() писать swap(), подразумевая std::swap() ?
ему а не мне
Я только плюсы умею читать, видимо, сорян
Так как раз в этом контексте не обязательно std::swap подразумевается Может быть кастомный класс, для которого определен swap в его неймспейсе Вот для того, чтобы найти этот самый swap и пишется без std::, так как в этом случае используется ADL
Называть переменные, объекты, функции и т.д. именами, которые есть в языке - не хорошо...
да, вот так более корректное объяснение, чем мое
swap, hash на ум приходят Это явно исключения Более того, тот же std::sort реализован специально так, чтобы swap по ADL находить
Лично я предпочитаю слегка дополненную венгерскую нотацию - глобальные объекты g_Name, локальные объекты Name, локальные приватные объекты класса _Name. Если везде так писать, то запутаться сложнее.
И при чем тут это? swap (а речь то о нем) имеет вполне определенное назначение Тем более это функция, а не объект
Почему функцию класса нельзя назвать Swap() , чтоб проблем не было?
Можно Но речь о свободной функции (которая, кстати, может вызывать мемберную) Это позволит, например, использовать подобный эффективный обмен значениями внутри std::sort (там она вызывается именно как swap - без указания неймспейса)
А std::sort() вызывает swap(), который определен в хеадере <algorithm>?
Боже ж... Там в глубине кода (по крайней мере в реализации от микрософта) попросту написано что-то концептуально подобное: if (/* swap condition */) { swap(current, pivot); } Если в неймспейсе std не находится реализация этой функции для типа данных, диапазон объектов которого сортируется, то производится ADL, что означает, что в неймспейсе, в котором объявлен наш тип, ищется кастомная реализация swap Это позволяет такое делать: namespace awesome { class Great { ... }; void swap(Great& lhs, Great& rhs) noexcept { ... } } // namespace awesome Вот внутри std::sort будет найден и использован awesome::swap для awesome::Great
Можешь использовать std::swap если совсем тупой (или наоборот слишком умный)
Обсуждают сегодня