改變[First, Last)區間中的元素次序,使它們符合下一排列次序,使用operator<比較元素
改變[First, Last)區間中的元素次序,使它們符合下一排列次序,使用_Pred(elem1,elem2)比較元素,如果elem1<elem2應該返回true
改變[First, Last)區間中的元素次序,使它們符合上一排列次序,使用operator<比較元素
改變[First, Last)區間中的元素次序,使它們符合上一排列次序,使用operator<比較元素,使用_Pred(elem1,elem2)比較元素,如果elem1<elem2應該返回true
如果你要遍歷所有拍了,必須首先將所有元素排序,然後逐次調用上面的算法.
複雜度:線性、最多執行numElems/2次交換
使用例子:
template<typename T>
inline void INSERT_ELEMENTS(T& coll, int first, int last)
{
for (int i = first; i <= last; ++i)
{
coll.insert(coll.end(), i);
}
}
template<typename T>
inline void PRINT_ELEMENTS(const T & coll, const string& optcstr = "")
{
cout << optcstr;
for (auto elem : coll)
{
cout << elem << ' ';
}
cout << endl;
}
int main()
{
vector<int>a;
INSERT_ELEMENTS(a, 1, 3);
PRINT_ELEMENTS(a, "on entry: ");
while (next_permutation(a.begin(),a.end()))
{
PRINT_ELEMENTS(a, " ");
}
PRINT_ELEMENTS(a, "afterward: ");
while (prev_permutation(a.begin(),a.end()))
{
PRINT_ELEMENTS(a, " ");
}
PRINT_ELEMENTS(a, "now: ");
while (prev_permutation(a.begin(),a.end()))
{
PRINT_ELEMENTS(a, " ");
}
PRINT_ELEMENTS(a, "afterward: ");
}