Обтекание вектора C ++, как в Python - PullRequest
2 голосов
/ 16 марта 2012

Я хочу "обернуть" вокруг списка / вектора в C ++, как в Python.По сути, я хочу переместить элементы из конца списка в начало списка.Я не хочу явно создавать новый список.

В Python я могу написать что-то вроде:

my_list = [1, 2, 3, 4, 5]
#[1, 2, 3, 4, 5]

q = collections.deque(my_list)
q.rotate(3)
#deque([3, 4, 5, 1, 2])

Я смотрел на deque в STL, но не вижуничего похожего на вращение.Похоже, должен быть простой способ сделать это с помощью итераторов или чего-то подобного.

Ответы [ 2 ]

11 голосов
/ 16 марта 2012

Вы ищете std::rotate из стандартной библиотеки, которая предлагает простой способ сделать это с помощью итераторов.

#include <algorithm>

std::vector<T> v /* = populate() */;
std::rotate(v.begin(), v.begin() + 3, v.end());

Можно использовать любой прямой итератор, поэтому он работает с большинством (последовательных) контейнеров.

0 голосов
/ 16 марта 2012

Вы можете использовать

#include <algorithm>
std::reverse(my_list.begin(),my_list.end());

или используйте

reverse_iterator rbegin();

для обратной петли в векторе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...