受け入れられた回答がある場合でも、通常の C++ の方法は、提供されたアルゴリズムを使用することです。この場合、std::rotateにする必要があります
#include <vector>
#include <algorithm>
#include <iostream>
#include <iterator> // for std::advance
int main(int argc, char** argv) {
std::vector<int> v = { 0, 1, 2, 3, 4, 5 };
std::cout << "Before: ";
for (auto element : v)
std::cout << element << " ";
std::cout << std::endl;
// edit starts here
auto first=v.begin();
auto nfirst=first;
std::advance(nfirst, 4); // Iterator of first element to move to front
auto last=nfirst;
std::advance(last, 1); // 1 is element count for moving to front
std::rotate(first, nfirst, last);
// edit ends here
std::cout << "After: ";
for (auto element : v)
std::cout << element << " ";
std::cout << std::endl;
return 0;
}
編集:
Luc Touraille との話し合いの結果、改善の余地があることがわかりました。これで、ソリューションはstd::advance
イテレータ操作に使用されます。したがって、 の要件である前方反復子で動作するはずですstd::rotate
。