Есть ли в C ++ встроенная векторная функция для обратного вектора?
Или вам просто нужно сделать это вручную?
Для этого std::reverse
в algorithm
заголовке есть функция .
#include <vector>
#include <algorithm>
int main() {
std::vector<int> a;
std::reverse(a.begin(), a.end());
return 0;
}
Все контейнеры предлагают обратный просмотр их содержимого с помощью
rbegin()
иrend()
. Эти две функции возвращают так называемые обратные итераторы , которые можно использовать как обычные, но похоже, что контейнер фактически перевернут.Живой пример на Ideone . Вывод:
источник
std::sort
вектор 1000 элементов, если вам просто нужно топ-10 в неопределенном порядке, потому что он более элегантный, чемstd::partition
? Это школа мысли, которая наносит вред моему опыту работы с ПК сегодня, как это было 15 лет назад, с той разницей, что еще больше циклов потрачено впустую, миллиарды из них.print_range
не правильно: он не будет работать при пропуске пустого диапазона.std::reverse(a.rbegin(), a.rend())
делать? ; ^)Вы можете использовать
std::reverse
как этоисточник
Вы также можете использовать
std::list
вместоstd::vector
.list
имеет встроенную функцию list :: reverse для реверсирования элементов.источник
Часто причина, по которой вы хотите повернуть вектор, заключается в том, что вы заполняете его, нажимая на все элементы в конце, но фактически получаете их в обратном порядке. В этом случае вы можете перевернуть контейнер по ходу движения, используя
deque
вместо этого и толкая их прямо вперед. (Илиvector::insert()
вместо этого вы можете вставить элементы впереди , но это будет медленно, когда есть много элементов, потому что для каждой вставки необходимо перетасовывать все остальные элементы.) Так что вместо:Вы можете вместо этого сделать:
источник
источник