一:merge
?是 C++ STL 中的一個算法函數,用于將兩個已排序的序列合并成一個有序序列。
template<class InputIterator1, class InputIterator2, class OutputIterator, class Compare> OutputIterator merge(InputIterator1 first1, InputIterator1 last1, InputIterator2 first2, InputIterator2 last2, OutputIterator result, Compare comp);
功能:
將兩個已排序的范圍?[first1, last1)
?和?[first2, last2)
?合并到范圍?[result, result + (last1 - first1) + (last2 - first2))
?中,使用比較器?comp
?進行元素的比較。
返回值:
返回指向存儲結果的范圍的尾后迭代器?result + (last1 - first1) + (last2 - first2)
。
//merge算法,容器元素合并,存儲到另一個容器
// merge 函數只能將兩個有序的范圍合并成一個有序的范圍,而不能自動對合并后的范圍進行排序void test01()
{vector<int>v1;vector<int>v2;/*for (int i = 0; i < 5; i++){v1.push_back(i + 1);v2.push_back(i + 2);}*/for (int i = 5; i >=0; i--){v1.push_back(i + 1);v2.push_back(i + 2);}vector<int>v3;v3.resize(v1.size() + v2.size());//如果數據是升序,那么第六個參數不用寫//merge(v1.begin(), v1.end(), v2.begin(), v2.end(), v3.begin());//如果數據是降序,那么第六個參數寫great<int>()merge(v1.begin(), v1.end(), v2.begin(), v2.end(), v3.begin(),greater<int>());for_each(v3.begin(), v3.end(), [](int val)->void {cout << val << " "; });}
二:sort
?是 C++ STL 中的一個算法函數,用于對指定范圍內的元素進行排序。
函數原型:
cpp復制代碼
template<class RandomAccessIterator> void sort(RandomAccessIterator first, RandomAccessIterator last); template<class RandomAccessIterator, class Compare> void sort(RandomAccessIterator first, RandomAccessIterator last, Compare comp);
功能:
對范圍?[first, last)
?內的元素進行排序。
返回值:
無。
//sort算法
struct mysort
{bool operator()(int v1, int v2){return v1 > v2;}
};
void test02()
{vector<int>v = { 2,35,634,523 };sort(v.begin(), v.end(),mysort());for_each(v.begin(), v.end(), [](int val)->void {cout << val << " "; });
}
random_shuffle
?是 C++ STL 中的一個算法函數,用于對指定范圍內的元素進行亂序排列。
template<class RandomAccessIterator> void random_shuffle(RandomAccessIterator first, RandomAccessIterator last); template<class RandomAccessIterator, class RandomNumberGenerator> void random_shuffle(RandomAccessIterator first, RandomAccessIterator last, RandomNumberGenerator&& gen);
功能:
對范圍?[first, last)
?內的元素進行隨機亂序。
返回值:
無。
//random_shuffle 亂序
void test03()
{srand((unsigned int)time(NULL));vector<int>v;for (int i = 0; i < 10; i++){v.push_back(i + 1);}for_each(v.begin(), v.end(), [](int val)->void {cout << val << " "; });cout << endl;random_shuffle(v.begin(), v.end());for_each(v.begin(), v.end(), [](int val)->void {cout << val << " "; });
}
reverse
?是 C++ STL 中的一個算法函數,用于反轉指定范圍內的元素順序。
template<class BidirectionalIterator> void reverse(BidirectionalIterator first, BidirectionalIterator last);
功能:
對范圍?[first, last)
?內的元素進行反轉。
返回值:
無。
//reverse 反轉指定范圍元素
void test04()
{vector<int>v;for (int i = 0; i < 10; i++){v.push_back(i + 1);}for_each(v.begin(), v.end(), [](int val)->void {cout << val << " "; });cout << endl;reverse(v.begin(), v.end());for_each(v.begin(), v.end(), [](int val)->void {cout << val << " "; });
}