一、遍历
1.for_each
void MyPrint(int val){
cout << val << endl;
}
vector<int> v1 = {1, 2, 3, 4};
for_each(v1.begin(), v1.end(), MyPrint);
2.transform
v2.resize(v1.size()); //先开辟空间,否则报错
transform(v1,begin(), v1.end(), v2.begin(), MyPrint);
二、查找
1.find
找到并返回指定元素的迭代器,找不到返回end()。需要用迭代器来接收返回值。
vector<int>::iterator it = find(v1.begin(), v1.end(), 4);
if(it==v1.end()){
cout << "未找到该元素" << endl;
}
else{
cout << "找到该元素" << endl;
}
2.find_if
class GreaterFive {
public:
bool operator()(int val) {
return val > 2;
}
};
vector<int>::iterator it = find_if(v.begin(), v.end(), GreaterFive());
if (it == v.end()) {
cout << "未找到该元素!" << endl;
}
else {
cout << "找到该元素:" << *it << endl;
}
3.adjacent_find
查找相邻重复元素,返回相邻元素的第一个位置的迭代器,找不到返回结束迭代器。
vector<int> v2 = {1, 2, 3, 3, 4};
vector<int>::iterator it = adjacent(v2.begin(),v2.end());
if(it == v.end()){
cout << "未找到相邻重复元素!" << endl();
}
else{
cout << "找到相邻重复元素:" << *it << endl; //找到3
}
4.binary_search
查找指定元素,找到返回true,没找到返回false。(仅适用于有序序列)
vector<int> v1 = {1, 2, 3, 4};
bool ret = binary_search(v.begin(), v.end(), 4);
if(ret){
cout << "找到该元素!" << endl;
}
else{
cout << "未找到该元素!" << endl;
}
5.count
统计元素个数
vector<int> v1 = {1, 2, 3, 3, 3, 3, 4};
int num = v1.count(v1.begin(), v1.end(), 3); //结果返回4
6.count_if
vector<int> v1 = {1, 2, 3, 3, 3, 3, 4};
class greater3 {
public:
bool operator()(int val){
return val == 3;
}
};
int num = v1.count_if(v1.begin(),v1.end(),greater3()); //返回3的数量4
三、排序
1.sort
vector<int> v1 = {1, 2, 6, 8, 5, 3, 4};
void myPrint(int val) {
cout << val << " ";
}
sort(v1.begin(),v1.end(),myPrint); //升序,第三个参数可要可不要
sort(v1.begin(),v1.end(),greater<int>()); //降序
2.random_shuffle
vector<int> v1 = {1, 2, 6, 8, 5, 3, 4};
srand((unsigned int)time(NULL)); //加上随机数种子
random_shufflle(v1.begin(),v1.end());
3.merge
两个容器必须是有序的,合并之后也是一个有序序列。
vector<int> v1 = {1, 2, 6, 8, 5, 3, 4};
vector<int> v2 = {7, 7, 9, 14, 12, 11, 10};
vector<int> v;
merge(v1.begin(),v1.end(),v2.begin(),v2.end(),v.begin());
4.reverse
将容器内的元素反转。
reverse(v1.begin(),v1.end());
四、拷贝和替换
1.copy
把容器内指定范围内元素拷贝到另一容器中,另一容器要提前开辟空间。
vector<int> v1 = {1, 2, 6, 8, 5, 3, 4};
vector<int> v;
v.resize(v1.size());
copy(v1.begin(),v1.end(),v.begin());
2.replace
将容器内指定范围的旧元素修改为新元素。
replace(v1.begin(),v1.end(),2,20);
//把v1内的2全部换成20
3.replace_if
将容器内指定范围满足条件的元素替换成新元素。
class MyPrint{
public:
void operator(int val){
cout << val << " ";
}
};
replace(v1.begin(),v1.end(),MyPrint());
4.swap
互换两个容器的元素。
swap(v1,v2);
五、算数生成
1.accumulate
计算区间内容器元素累计总和
accumulate(v1.begin(),v1.end(),0); //累加的起始值为0
2.fill
向容器中填充指定的值
fill(v1.begin(),v1.end(),100);
六、集合
1.set_intersection
求两个容器的交集,两个集合必须是有序序列,返回值是交集中最后一个元素的迭代器位置。目标容器开辟空间需要从两个容器中取小值。
vector<int> v1 = {1, 2, 6, 8, 5, 3, 7};
vector<int> v2 = {7, 7, 9, 14, 12, 11, 10};
vector<int> v;
vector<int>::iterator it1;
it1 = set_intersection(v1.begin(),v1.end(),v2.begin(),v2.end(),v.begin());
2.set_union
求两个容器的并集,两个集合必须是有序序列,返回值是并集中最后一个元素迭代器位置。目标容器开辟空间需要取两个容器的大小之和。
vector<int> v1 = {1, 2, 6, 8, 5, 3, 7};
vector<int> v2 = {7, 7, 9, 14, 12, 11, 10};
vector<int> v;
vector<int>::iterator it2;
it2 = set_intersection(v1.begin(),v1.end(),v2.begin(),v2.end(),v.begin());
3.set_difference
求两个容器的差集。两个集合必须是有序序列,返回差集中最后一个元素的迭代器位置。
vector<int> v1 = {1, 2, 6, 8, 5, 3, 7};
vector<int> v2 = {7, 7, 9, 14, 12, 11, 10};
vector<int> v_1;
vector<int> v_2;
vector<int>::iterator it1;
vector<int>::iterator it2;
it1 = set_intersection(v1.begin(),v1.end(),v2.begin(),v2.end(),v_1.begin());
it2 = set_intersection(v2.begin(),v2.end(),v1.begin(),v1.end(),v_2.begin());
标签:容器,begin,end,STL,v2,v1,算法,vector
From: https://blog.csdn.net/weixin_52133252/article/details/142266039