C++ STL變序型算法 排列元素next_permutation、prev_permutation使用方法

在這裏插入圖片描述

改變[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: ");


}

在這裏插入圖片描述

發佈了314 篇原創文章 · 獲贊 231 · 訪問量 8951
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章