Я знаю, что это довольно старый вопрос, но никто не упомянул std::rotate
, который, я думаю, в некоторых случаях может быть подходящим инструментом для работы.
Модифицированный пример из http://www.cplusplus.com/reference/algorithm/rotate/:
#include <iostream> // std::cout
#include <algorithm> // std::rotate
#include <vector> // std::vector
int main () {
std::vector<int> myvector;
// set some values:
for (int i=1; i<10; ++i) myvector.push_back(i); // 1, 2, 3, ... 9
std::rotate(myvector.begin(),myvector.begin()+2,myvector.end());
// 3, 4, 5, 6 ... 9, 1, 2
// print out content:
std::cout << "myvector contains:";
for (std::vector<int>::iterator it=myvector.begin(); it!=myvector.end(); ++it)
std::cout << ' ' << *it;
std::cout << '\n';
return 0;
}
Выход:
myvector contains: 3 4 5 6 7 8 9 1 2
Обратите внимание, поскольку my_vector
модифицируется функцией std::rotate
, это не очень эффективно и не полезно, если вы просто хотите повторить вектор один раз.
Однако, хотя это, вероятно, не самый лучший ответ на этот вопрос SO, я надеюсь, что он все еще может принести некоторую пользу людям с похожими проблемами.