Быстрый способ реализовать pop_front в std :: vector

Я использую некоторые классы и несколько служебных методов, которые используют std :: vector.

Теперь мне нужно использовать в каждом кадре метод pop_front - push_back для одного из этих классов (но все они связаны и работают вместе, поэтому я не могу изменить только один).

Большинство операций повторяются по всем element и push_back, поэтому для наилучшей работы мне следует выполнить форк репозитория этих классов и утилит, создать все шаблоны и использовать deque или list.

Но это означает, что придется много переписывать код и тестировать. из-за этого я не уложусь в срок.

Так что мне нужен совет, как записать эффективный pop_front в вектор статического размера (размер не изменится).

Я нашел здесь способ :

template
void pop_front(std::vector& vec)
{
   vec.front() = vec.back();
   vec.pop_back();
   vec.front() = vec.back();  // but should this work?
}

И еще одна идея должна быть такой:

template
void pop_front(std::vector& vec, already_allocated_vector vec1)
{
   vec1.clear();
   copy(vec.begin(), vec.end()-1, vec1.begin());
   copy(vec1.begin(), vec1.end(), vec.begin());
}

Какое из этих двух решений быстрее? Любые другие решения?

20
задан Shree 23 August 2019 в 06:08
поделиться