| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Для новичков > Массивы |
| Автор: AndreyTL 10.2.2011, 21:01 |
| Добрый вечер! Сталкнулся с проблемой. У меня есть vector<int> a, в нем следующие элементы 3 2 3 4 5. Мне нужно преобразовать его в 5 3 2 3 4. Есть ли способ достигнуть этого (сдвинуть последовательность на 1 вправо) не используя цикл? И будет ли выйгрышь во времени? Спасибо. |
| Автор: KaraKum 10.2.2011, 21:04 |
| vector двигать нельзя, но вот в deque можно удалить последний элемент и добавить его в начало - получается, фактически, сдвиг на 1 по-кругу. |
| Автор: mes 10.2.2011, 21:09 |
| http://www.cplusplus.com/reference/algorithm/copy/ |
| Автор: KaraKum 10.2.2011, 21:19 |
А как этой функцией двигать по-кругу? |
| Автор: AndreyTL 10.2.2011, 21:24 |
| Спасибо! |
| Автор: KaraKum 11.2.2011, 13:58 |
Ведь при использовании erase() все элементы вектора, находящиеся справа, сдвигаются (копируются), а у deque остаются на своих местах, что эффективнее в (size() + 1) * 2 раз |
| Автор: mes 11.2.2011, 14:05 | ||
никак - т.к. это была не рыба, а удочка ну и собственно вопрос тс:
можно было конечно дать remove, но он, имхо, немножко трудней для понимания хотя при некотором желании и трудолюбии они все выискиваются по той ссылке с шагом в один клик |
| Автор: KaraKum 11.2.2011, 14:12 | ||
|
| Автор: mes 11.2.2011, 14:15 |
для такой ссылки, надо знать, что искать.. а у ссылки-"удочки", сразу все перед глазами |