簡(jiǎn)介
sort
//對(duì)容器內(nèi)容進(jìn)行排序
random_shuffle
//洗牌,指定范圍內(nèi)的元素隨機(jī)調(diào)整次序
merge
//容器元素合并,并存儲(chǔ)到另一容器中
reverse
//翻轉(zhuǎn)指定范圍的元素
sort
函數(shù)原型
sort(iterator begin,iterator end,_Pred)
void print(int val)
{
cout << val << " ";
}
class Greater
{
public:
bool operator()(int val1,int val2)
{
return val1 > val2;
}
};
void test01()
{
vector<int>v;
v.push_back(1);
v.push_back(2);
v.push_back(5);
v.push_back(3);
v.push_back(4);
v.push_back(6);
sort(v.begin(), v.end()); //默認(rèn)排序從小到大
for_each(v.begin(), v.end(), print); //1 2 3 4 5 6
cout << endl;
sort(v.begin(), v.end(), Greater()); //利用仿函數(shù)趟畏,實(shí)現(xiàn)降序排列
for_each(v.begin(), v.end(), print);// 6 5 4 3 2 1
}
sort函數(shù)默認(rèn)從小到大排序,但是可以通過(guò)仿函數(shù)來(lái)實(shí)現(xiàn)從大到小排序。
random_shuffle
函數(shù)原型
random_shuffle(iterator begin,iterator end)
洗牌 指定范圍內(nèi)的元素隨機(jī)調(diào)整次序
void print(int val)
{
cout << val << " ";
}
void test01()
{
srand((unsigned int)time(NULL));
vector<int> v;
for (int i = 0; i < 10; i++)
{
v.push_back(i + 1);
}
random_shuffle(v.begin(), v.end()); //洗牌算法
for_each(v.begin(), v.end(), print); // 9 2 10 3 1 6 8 4 5 7
}
這個(gè)例子我們加入了隨機(jī)數(shù)種子,需要包含頭文件<ctime>篙螟。這種隨機(jī)打亂順序的算法可以用來(lái)模擬生活中抽簽的例子。
merge
函數(shù)原型
merge(iterator begin1,iterator end1,iterator begin2,iterator end2,dest)
作用:兩個(gè)有序容器合并到一個(gè)容器中
begin1问拘、end1 分別是源容器1的起始迭代器和終止迭代器
begin2遍略、end2 分別是另一個(gè)源容器2的起始迭代器和終止迭代器
dest 目標(biāo)容器的起始迭代器
void print(int val)
{
cout << val << " ";
}
void test01()
{
vector<int> v1;
vector<int> v2;
for (int i = 0; i < 10; i++)
{
v1.push_back(i + 1);
v2.push_back(i + 5);
}
//目標(biāo)容器
vector<int> vtarget;
vtarget.resize(v1.size() + v2.size()); //給目標(biāo)容器分配空間
merge(v1.begin(), v1.end(), v2.begin(), v2.end(), vtarget.begin());
for_each(vtarget.begin(), vtarget.end(), print); //1 2 3 4 5 5 6 6 7 7 8 8 9 9 10 10 11 12 13 14
}
在使用merge算法的時(shí)候要注意:
- merge算法自只能對(duì)于有序的序列使用,并且兩個(gè)原容器的順序應(yīng)該相同场梆,不能是一個(gè)升序一個(gè)降序墅冷。
- 目標(biāo)容器要提前開(kāi)辟空間纯路,否則無(wú)法進(jìn)行合并或油。
reverse
函數(shù)原型
reverse(iterator begin,iterator end);
反轉(zhuǎn)指定范圍的元素
void print(int val)
{
cout << val << " ";
}
void test01()
{
vector<int> v1;
for (int i = 0; i < 10; i++)
{
v1.push_back(i + 1);
}
cout << "反轉(zhuǎn)前:" << endl;
for_each(v1.begin(), v1.end(), print); //1 2 3 4 5 6 7 8 9 10
cout << endl;
reverse(v1.begin(), v1.end());
cout << "反轉(zhuǎn)后:" << endl;
for_each(v1.begin(), v1.end(), print); //10 9 8 7 6 5 4 3 2 1
}