首页 > 编程语言 >STL——2.算法

STL——2.算法

时间:2024-10-10 13:18:00浏览次数:3  
标签:容器 begin end STL v2 v1 算法 vector

一、遍历
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

相关文章

  • STL——3.迭代器
     1.迭代器的基本概念作用:迭代器是用于遍历容器元素的对象。分类:输入迭代器输出迭代器前向迭代器双向迭代器随机访问迭代器2.迭代器的用法2.1输入迭代器#include<iostream>#include<iterator>#include<vector>intmain(){std::cout<<"Enterintegerssep......
  • K近邻算法
    一、K近邻算法基础介绍K近邻算法也是常说的KNN算法,是一种常见的分类和回归算法,当然我们常将其用于分类。是一种监督算法,该算法的内容其实和名字很像,根据邻居来进行判断。有点近朱者赤近墨者黑的意味。比如我们常说:某个人的工资一般是与其玩的最好的5个朋友(或者说是N个)工资......
  • kmp算法模板
    voidkmp(){n=strlen(s+1);//s是目标串m=strlen(p+1);//p是模板串//nxt预处理开始intj=0;nxt[1]=0;for(inti=2;i<=m;i++){while(j>0&&p[j+1]!=p[i])/*判断当前子串的前后缀相等的长度是否能增......
  • 从理论到实践:AI智能分析网关V4烟火检测算法的应用场景探索
    在信息化和智能化的今天,AI智能分析网关V4作为一款集成了先进技术的硬件设备,在烟火检测领域展现出了强大的应用价值。本文将详细阐述AI智能分析网关V4烟火检测算法的原理及其在各种场景中的应用。一、AI智能分析网关V4烟火检测算法原理深度学习基础TSINGSEE青犀AI智能分析网关V4......
  • 数据结构与算法2
    目录栈和队列1.栈(stack)1.1栈的定义和特点1.2顺序栈的表示1.3顺序栈的实现1.3.1顺序栈的初始化1.3.2顺序栈判断栈是否为空1.3.3求顺序栈长度1.3.4清空顺序栈1.3.5销毁顺序栈1.3.6顺序栈的入栈1.3.7顺序栈的出栈1.4栈链的表示1.5栈链的实现1.5.1栈链的初始化1.5.2判断......
  • 算法笔记(十五)——BFS 解决拓扑排序
    文章目录拓扑排序课程表课程表II火星词典拓扑排序有向无环图(DAG图)有向无环图指的是一个无回路的有向图AOV网:顶点活动图在有向无环图中,用顶点表示一个活动,用边来表示活动的先后顺序的图结构拓扑排序找到一个先后顺序,结果可能不唯一如何拓扑排序?找到一......
  • 二分图最大匹配-匈牙利算法
    二分图最大匹配设G为二分图,若在G的子图M中,任意两条边都没有公共节点,那么称M为二分图G的一组匹配。在二分图中,包含边数最多的一组匹配称为二分图的最大匹配。交替路:从一个未匹配点出发,依次经过非匹配边、匹配边、非匹配边…形成的路径叫交替路。增广路:从一个未匹配点......
  • 算法修炼之路之前缀和
    目录一:一维前缀和二:二维前缀和 三:LeetCodeOJ练习  1.第一题2.第二题 3.第三题 4.第四题5.第五题6.第六题一:一维前缀和这里通过例题来引出牛客_DP34【模板】前缀和画图分析:具体代码:#include<iostream>#include<vector>usingnamespacestd;int......
  • 算法校赛准备
    独木桥题目背景战争已经进入到紧要时间。你是运输小队长,正在率领运输部队向前线运送物资。运输任务像做题一样的无聊。你希望找些刺激,于是命令你的士兵们到前方的一座独木桥上欣赏风景,而你留在桥下欣赏士兵们。士兵们十分愤怒,因为这座独木桥十分狭窄,只能容纳$1$个人通过。假如......
  • 代码随想录算法训练营 | 背包问题 二维,背包问题 一维,416. 分割等和子集
    背包问题二维题目链接:背包问题二维文档讲解︰代码随想录(programmercarl.com)视频讲解︰背包问题二维日期:2024-10-09想法:dp[i][j],i表示需要从物品0-i中选择加入到背包中,j表示背包的容量,dp值表示最大的价值;递推公式,如果背包大小j都比此时要放的物品i的weight[i]小了,背包放不下......