Как вы resize
a std::deque
от перед вместо спины?deque.resize() с фронта * *?
(Да, конечно, я могу push_front
фиктивное значение тысячи раз, но есть лучший/более эффективный способ?)
Как вы resize
a std::deque
от перед вместо спины?deque.resize() с фронта * *?
(Да, конечно, я могу push_front
фиктивное значение тысячи раз, но есть лучший/более эффективный способ?)
Существует перегрузка insert
, которая вставляет N элементов:
std::deque<int> c;
std::size_t new_size = get_new_desired_size();
c.insert(c.begin(), new_size - c.size(), int());
(Этот пример требует, чтобы new_size >= c.size()
)
более полное решение:
std::deque<T> deque;
std::size_t new_size = /* ... */;
if (new_size >= deque.size())
deque.insert(deque.begin(), new_size - deque.size(), T());
else
deque.erase(deque.begin(), deque.begin() + deque.size() - new_size);
В связи с характером std::deque
все оставшихся итераторов должны оставаться в силе в любом случае.
Почему это более эффективно, чем создание 'new_size' раз' push_front() '? –
Что делать, если s.size()> new_size? – zyndor
@ RafałRawicki: Это будет не менее эффективно, но если реализация умна, это может быть лучше (у deque есть итераторы с произвольным доступом, поэтому вы можете легко получить счет). –