我想查找給定矢量的所有可能的矢量旋轉組合。我的代碼在一個向量中依次找到一個特定的元素,然後圍繞這個元素進行旋轉,但是當兩個相同的元素連續出現時會失敗,如{1,1,2} 下面是代碼片段,有人可以幫我規避問題,最好通過讓我說for循環內的if else循環。C++矢量旋轉所有組合
#include<vector>
#include<iostream>
#include<algorithm>
using namespace std;
vector<vector<int> > allrot(const vector<int>& a);
int main()
{
int myints[] = { 1, 1, 2 };
std::vector<int> a (myints, myints + sizeof(myints)/sizeof(int));
std::vector<vector<int> > b;
b = allrot(a);
}
vector<vector<int> > allrot(const vector<int>& a) {
std::vector<vector<int> > b;
for(int i = 1; i <= a.size(); i++) {
//int k;
//if (a[i] == a[i+1])
//k = a [i+1];
//else
//k = a[i];
auto pivot = std::find(a.begin(), a.end(), a[i]);
std::vector<int> dest(a.size());
std::rotate_copy(a.begin(), pivot, a.end(), dest.begin());
for (const auto &i : dest) {
std::cout << i << ' ';
}
std::cout << '\n';
b.push_back(dest);
}
return b;
}
道歉,如果問題看起來天真,我是新來的c + +。
如果這不是一個家庭作業,並且您需要它作爲一個程序,請考慮[std :: next_permutation](http://en.cppreference。com/w/cpp/algorithm/next_permutation) –
在C++中,數組(和std :: vector)中的索引是從0開始的。 Apropos'for(int i = 1; i <= a.size(); i ++)'and next'auto pivot = std :: find(a.begin(),a.end(),** a [i] **);' –
@AdrianColomitchi,我覺得所有的排列和所有的旋轉是非常不同的。 (即有'n'旋轉,但'n!'排列)。 –