#挑戰30天在頭條寫日記#
1.常用排序算法
算法簡介:
- sort 對容器内元素進行排序
- random_shuffle 洗牌 指定範圍内的元素随機調整次序
- merge 容器元素合并 并存儲到另一容器中
- reverse 反轉指定範圍的元素
2.sort 排序算法
/*
函數原型:
sort(iterator beg , iterator end ,_pred);
按照從小到大的順序排列順序
beg 開始疊代器
end 結束疊代器
_pred 謂詞
*/
//提供謂詞
class Greater20 {
public:
bool operator()(int val,int val2) {
return val > val2;
}
};
//列印函數
void myPrint(int val) {
cout << val << " ";
}
void test01() {
vector<int> v;
v.push_back(10);
v.push_back(40);
v.push_back(30);
v.push_back(40);
v.push_back(20);
v.push_back(40);
//利用sort進行升序
sort(v.begin(), v.end());
for_each(v.begin(), v.end(), myPrint);
cout << endl;
//利用sort進行降序
sort(v.begin(), v.end(), Greater20());
for_each(v.begin(), v.end(), myPrint);
}
int main() {
test01();
system("pause");
return 0;
}
3.random_shuffle 指定範圍内的元素随機調整次序
/*
函數原型:
random_shuffle(iterator beg , iterator end );
指定範圍内的元素随機調整次序
beg 開始疊代器
end 結束疊代器
*/
void myPrint(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);
}
//利用洗牌算法 打亂順序
random_shuffle(v.begin(), v.end());
for_each(v.begin(), v.end(), myPrint);
}
int main() {
test01();
system("pause");
return 0;
}
4.merge 兩個容器元素合并,并存儲到另一個容器中
/*
函數原型:
merge(iterator beg1 , iterator end1,iterator beg2,iterator end2,iterator dest );
容器元素合并,并存儲到另一個容器中
注意:兩個容器必須是有序的
beg1 容器1開始疊代器
end1 容器1結束疊代器
beg2 容器2開始疊代器
end2 容器2結束疊代器
dest 目标容器開始疊代器
*/
void myPrint(int val) {
cout<<val<<" ";
}
void test01() {
//開始容器 v1 v2
vector<int> v1;
vector<int> v2;
for (int i = 0; i < 10; i++) {
v1.push_back(i);
v2.push_back(i+1);
}
//目标容器
vector<int> dest;
//目标容器沒有指定空間 如果忘記會産生報錯
dest.resize(v1.size() + v2.size());
merge(v1.begin(), v1.end(), v2.begin(), v2.end(), dest.begin());
for_each(dest.begin(), dest.end(), myPrint);
}
int main() {
test01();
system("pause");
return 0;
}
5.reverse 将容器内元素進行反轉
/*
函數原型:
reverse(iterator beg ,iterator end);
反轉指定範圍的元素
beg 開始疊代器
end 結束疊代器
*/
void myPrint(int val) {
cout<<val<<" ";
}
void test01() {
vector<int> v;
v.push_back(10);
v.push_back(30);
v.push_back(50);
v.push_back(20);
v.push_back(40);
cout << "反轉前" << endl;
for_each(v.begin(), v.end(), myPrint);
cout << endl;
cout << "反轉後" << endl;
reverse(v.begin(), v.end());
for_each(v.begin(), v.end(), myPrint);
}
int main() {
test01();
system("pause");
return 0;
}