Подтвердить что ты не робот

Добавление 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. (Здесь смотрит на тебя Шон Родитель.)

4b9b3361

Ответ 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 "