0、导入包
#include <iostream>
#include <vector>
#include <stack>
#include <queue> // 队列支持(内部:基本上 链表 、 数组 )
#include <list> // list容器的支持
#include <set>
#include <map>
#include <algorithm> // 算法包
#include <unistd.h> // sleep(秒)
using namespace std;
1、for_each
遍历容器
//自定义仿函数
class _Function {
public:
void operator()(int value) {
cout << value << endl;
}
};
int main() {
set<int> sets;
sets.insert(100);
sets.insert(101);
sets.insert(102);
sets.insert(103);
sets.insert(104);
set<int> sets2;
sets2.insert(200);
sets2.insert(201);
sets2.insert(202);
sets2.insert(203);
sets2.insert(204);
//foreach
for_each(sets.begin(), sets.end(), _Function());
return 0;
}
100
101
102
103
104
2、transform
变化容器中的元素
class __unary_op {
public:
int operator()(const int value) {
return value + 2;// 修改每个元素
}
};
int main() {
vector<int> vectorVar;
vectorVar.insert(vectorVar.begin(), 10000);
vectorVar.insert(vectorVar.begin(), 20000);
vectorVar.insert(vectorVar.begin(), 30000);
vectorVar.insert(vectorVar.begin(), 40000);
//设置容器大小
vector<int> result;
result.resize(vectorVar.size());
transform(vectorVar.begin(), vectorVar.end(), result.begin(), __unary_op());
for (auto it = result.begin(); it !=result.end() ; it++) {
cout<<*it<<endl;
}
return 0;
}
40002
30002
20002
10002
3、find
查找
int main() {
vector<int> vectorVar;
vectorVar.insert(vectorVar.begin(), 10000);
vectorVar.insert(vectorVar.begin(), 40000);
vectorVar.insert(vectorVar.begin(), 30000);
vectorVar.insert(vectorVar.begin(), 20000);
//20000 30000 40000 10000
//返回的是迭代器
auto it = find(vectorVar.begin(), vectorVar.end(), 40000);
if(it!=vectorVar.end()){
cout<<"找到了"<<endl;
for (auto i = it; i!=vectorVar.end() ; ++i) {
cout<<*i<<endl;
}
}
else{
cout<<"没找到"<<endl;
}
return 0;
}
找到了
40000
10000
find函数返回的是迭代器,一旦找到指针就停止位移。因此指针会停在第一次找到的地方,因此找到的结果打印就是找到的地方的数据和后面的数据。
4、find_if
根据条件查找,上面的find函数内部其实是调用了find_if
int main() {
vector<int> vectorVar;
vectorVar.insert(vectorVar.begin(), 10000);
vectorVar.insert(vectorVar.begin(), 40000);
vectorVar.insert(vectorVar.begin(), 30000);
vectorVar.insert(vectorVar.begin(), 20000);
//20000 30000 40000 10000
//寻找小于2000的
//使用 bind2nd 函数适配器
auto it = find_if(vectorVar.begin(), vectorVar.end(), bind2nd(less<int>(), 10002));
if (it != vectorVar.end()) {
cout << "找到了小于10002" << endl;
for (auto i = it; i != vectorVar.end(); ++i) {
cout << *i << endl;
}
} else {
cout << "没找到" << endl;
}
return 0;
}
找到了小于10002
10000
5、cout和count_if
根据条件计算数量
int main() {
vector<int> vectorVar;
vectorVar.insert(vectorVar.begin(), 10000);
vectorVar.insert(vectorVar.begin(), 40000);
vectorVar.insert(vectorVar.begin(), 30000);
vectorVar.insert(vectorVar.begin(), 20000);
//20000 30000 40000 10000
long size = count(vectorVar.begin(), vectorVar.end(), 10000);
cout<<"等于10000的数量:"<<size<<endl;
long size2 = count_if(vectorVar.begin(), vectorVar.end(), bind2nd(less<int>(),30000));
cout<<"小于30000的数量:"<<size2<<endl;
return 0;
}
等于10000的数量:1
小于30000的数量:2
6、merge
合并容器
int main() {
vector<int> vectorVar;
vectorVar.insert(vectorVar.begin(), 10000);
vectorVar.insert(vectorVar.begin(), 40000);
vectorVar.insert(vectorVar.begin(), 30000);
vectorVar.insert(vectorVar.begin(), 20000);
vector<int> vectorVar2;
vectorVar2.insert(vectorVar2.begin(), 10002);
vectorVar2.insert(vectorVar2.begin(), 40003);
vectorVar2.insert(vectorVar2.begin(), 30004);
vectorVar2.insert(vectorVar2.begin(), 20006);
vector<int> vectorVarResult;
vectorVarResult.resize(vectorVar.size()+vectorVar2.size());
merge(vectorVar.begin(),vectorVar.end(),vectorVar2.begin(),vectorVar2.end(),vectorVarResult.begin());
for (auto i = vectorVarResult.begin(); i!=vectorVarResult.end() ; ++i) {
cout<<*i<<endl;
}
return 0;
20000
20006
30000
30004
40000
10000
40003
10002
7、sort排序
使用系统自定义排序+自定义仿函数排序
class my_less {
public:
bool operator()(int x, int y) {
return x < y;
}
};
int main() {
vector<int> vectorVar;
vectorVar.insert(vectorVar.begin(), 10000);
vectorVar.insert(vectorVar.begin(), 40000);
vectorVar.insert(vectorVar.begin(), 30000);
vectorVar.insert(vectorVar.begin(), 20000);
//从大到小排序
//使用系统仿函数(谓词)
sort(vectorVar.begin(), vectorVar.end(), greater<int>());
for (auto itVar = vectorVar.begin(); itVar != vectorVar.end(); itVar++) {
cout << *itVar << endl;
}
cout << "-----------------------" << endl;
//从小到大排序
//自定义仿函数
sort(vectorVar.begin(), vectorVar.end(), my_less());
// 直接打印 vectorVar容器 此时 是不是就已经排序了
for (auto itVar = vectorVar.begin(); itVar != vectorVar.end(); itVar++) {
cout << *itVar << endl;
}
return 0;
}
40000
30000
20000
10000
-----------------------
10000
20000
30000
40000
8、copy
复制容器到另外一个容器
int main() {
vector<int> vectorVar;
vectorVar.insert(vectorVar.begin(), 10000);
vectorVar.insert(vectorVar.begin(), 40000);
vectorVar.insert(vectorVar.begin(), 30000);
vectorVar.insert(vectorVar.begin(), 20000);
vector<int> result;
result.resize(vectorVar.size());
copy(vectorVar.begin(), vectorVar.end(),result.begin());
for (auto itVar = result.begin(); itVar != result.end(); itVar++) {
cout <<"result:"<< *itVar << endl;
}
return 0;
}
result:20000
result:30000
result:40000
result:10000
9、replace
替换容器中的某个内容
int main() {
vector<int> vectorVar;
vectorVar.insert(vectorVar.begin(), 10000);
vectorVar.insert(vectorVar.begin(), 40000);
vectorVar.insert(vectorVar.begin(), 30000);
vectorVar.insert(vectorVar.begin(), 20000);
replace(vectorVar.begin(),vectorVar.end(),30000,5);
for (auto itVar = vectorVar.begin(); itVar != vectorVar.end(); itVar++) {
cout <<"result:"<< *itVar << endl;
}
return 0;
}
result:20000
result:5
result:40000
result:10000
网友评论