Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > 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
Цитата(mes @  10.2.2011,  22:09 Найти цитируемый пост)
http://www.cplusplus.com/reference/algorithm/copy/ 

А как этой функцией двигать по-кругу?

Автор: AndreyTL 10.2.2011, 21:24
Спасибо!

Автор: xvr 11.2.2011, 13:04
Цитата(KaraKum @  10.2.2011,  21:04 Найти цитируемый пост)
vector двигать нельзя,

Почему нельзя? erase и insert никто не отменял. Другое дело, что это будет неэффективно.

Цитата(KaraKum @  10.2.2011,  21:04 Найти цитируемый пост)
но вот в deque можно удалить последний элемент и добавить его в начало - получается, фактически, сдвиг на 1 по-кругу. 
Угу, и для vector точно так же (хотя внутри получится тот же самый цикл, которого хотел избежать ТС  smile )


Автор: KaraKum 11.2.2011, 13:58
Цитата(xvr @  11.2.2011,  14:04 Найти цитируемый пост)
Угу, и для vector точно так же

Ведь при использовании erase() все элементы вектора, находящиеся справа, сдвигаются (копируются), а у deque остаются на своих местах, что эффективнее в (size() + 1) * 2 раз  smile 

Автор: mes 11.2.2011, 14:05
Цитата(KaraKum @  10.2.2011,  20:19 Найти цитируемый пост)
А как этой функцией двигать по-кругу? 

никак - т.к. это была не рыба, а удочка smile

ну и собственно вопрос тс:
Цитата(AndreyTL @  10.2.2011,  20:01 Найти цитируемый пост)
. Есть ли способ достигнуть этого (сдвинуть последовательность на 1 вправо) не используя цикл? 


можно было конечно дать remove, но он, имхо, немножко трудней для понимания smile
хотя при некотором желании и трудолюбии они все выискиваются по той ссылке с шагом в один клик 
 smile 

Автор: KaraKum 11.2.2011, 14:12
Цитата(mes @  11.2.2011,  15:05 Найти цитируемый пост)
хотя при некотором желании и трудолюбии они все выискиваются по той ссылке с шагом в один клик 

 smile тогда странно что вместо приведённой ссылки нету http://google.com  smile 

Автор: mes 11.2.2011, 14:15
Цитата(KaraKum @  11.2.2011,  13:12 Найти цитируемый пост)
тогда странно что вместо приведённой ссылки нету вот такой 

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

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)