[英]C++ <algorithm> permutation
為什么此代碼注釋有效(代碼編譯並運行正常,但實際上並未顯示排列):
int main(int argc, char *argv[])
{
long number;
vector<long> interval;
vector<long>::const_iterator it;
cout << "Enter number: ";
cin >> number;
while(number-->0){
interval.push_back(number);
}
do{
for(it = interval.begin(); it < interval.end(); ++it){
cout << *it << " ";
}
cout << endl;
} while(next_permutation(interval.begin(), interval.end()));
return (0);
}
但改變這一行后:
while(next_permutation(interval.begin(), interval.end()));
有:
while(prev_permutation(interval.begin(), interval.end()));
不是排列通過作用於位置來改變向量中的元素嗎?
PS:我現在編輯了代碼。
排列按字典順序排列 ,這就是std::next_permutation
和std::prev_permutation
算法的遍歷。
在這里輸入“最大”的排列,所以沒有下一個排序。
不是排列通過作用於位置來改變向量中的元素嗎?
編號next_permutation
使用元素的順序來確定下一個排列。
例如,如果A <B <C,那么[A,B,C](012)的next_permutation
將是[A,C,B](021)。 但是,如果A <C <B,那么[A,B,C](021)的next_permutation
將是[C,A,B](102)。
由於你的向量最初是遞減順序,它將是最后的排列。
您可以使用std::greater
排序來反轉比較方向。
} while(next_permutation(interval.begin(), interval.end(), greater<long>()));
// ^^^^^^^^^^^^^^^
我不認為next_permutation可以在位置上工作(它將存儲該信息的位置?)。 您需要能夠比較next_permutation的元素才能工作,這就是它用於生成按字典順序排列的下一個排列。
嘗試以相反的順序插入數字,看看是否有效。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.