簡體   English   中英

C ++ <algorithm> 排列

[英]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_permutationstd::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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM