Добавление C-массива к вектору в обратном порядке в С++ 98/03 без цикла for
Довольно сложно добавить C-массив к вектору (в С++ 98/03) следующим образом:
std::vector<int> vec;
const int array[5] = { 1 , 2 , 3 , 4 , 5};
vec.insert( vec.end() , array , array + 5 );
Есть ли способ добавить массив к вектору в обратном порядке в С++ 98/03 без записи цикла for. (Здесь смотрит на тебя Шон Родитель.)
Ответы
Ответ 1
Там вы идете. Используйте std::reverse_copy
с помощью std::back_inserter
, чтобы добавить элементы в вектор:
std::vector<int> vec;
int array[5] = { 1 , 2 , 3 , 4 , 5};
std::reverse_copy(array , array + 5, std::back_inserter(vec));
Если вы обеспокоены производительностью, не забывайте reserve()
перед копированием.
Ответ 2
vec.insert(std::end(vec),
std::rbegin(array),
std::rend(array));
Обратите внимание, что это использует С++ 14, но обратные итераторы были вокруг намного дольше, вам просто нужно было создать их вручную, если бы застрял со старым стандартом:
int const a1[] = {1, 2, 3, 4, 5};
int a2[5];
std::copy(std::reverse_iterator<int const*>(std::end(a1)),
std::reverse_iterator<int const*>(std::begin(a1)),
std::begin(a2)); // copy in reverse
std::copy(std::begin(a2),
std::end(a2),
std::ostream_iterator<int>(std::cout, " ")); // prints "5 4 3 2 1 "