C++ STL變序型算法 將元素往前搬partition、stable_partition使用方法

在這裏插入圖片描述

將[First, Last)區間中令_Pred(elem)爲true的元素向前移動

返回令_Pred爲false的第一個元素位置.

在這裏插入圖片描述

將[First, Last)區間中令_Pred(elem)爲true的元素向前移動

返回令_Pred爲false的第一個元素位置.

兩者差別是:不管元素是否滿足給定準則,stable_partition會保持它們之間的相對次序

複雜度:partition():線性,共執行_Pred()numElems次,以及最多numElems/2次交換.

stable_partition:如果系統擁有足夠內存,那麼就是線性複雜度,執行_Pred()及交換共numElems次,如果沒有足夠內存,就是nlogn複雜度,執行_Pred()numElems X log(numElems)次

使用例子:

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;
	vector<int>b;
	INSERT_ELEMENTS(a, 1, 9);
	INSERT_ELEMENTS(b, 1, 9);
	PRINT_ELEMENTS(a, "a: ");
	PRINT_ELEMENTS(b, "b: ");
	cout << endl;
	auto pos1 = partition(a.begin(), a.end(), [](int elem) {return elem % 2 == 0; });
	auto pos2 = stable_partition(b.begin(), b.end(), [](int elem) {return elem % 2 == 0; });
	PRINT_ELEMENTS(a, "a: ");
	cout << "first odd element: " << *pos1 << endl;
	PRINT_ELEMENTS(b, "b: ");
	cout << "first odd element: " << *pos2 << endl;
}

在這裏插入圖片描述

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