首页 > 编程语言 >algorithm:算法库

algorithm:算法库

时间:2023-04-22 16:11:11浏览次数:26  
标签:begin end algorithm people 元素 算法 vector 排序

#include <algorithm>
using namespace std;
// 常用函数
sort(begin, end); // 对区间进行排序
reverse(begin, end); // 对区间进行翻转
rotate(begin, middle, end); // 将区间按照middle为界旋转
unique(begin, end); // 去除区间中相邻的重复元素
min_element(begin, end); // 找到区间中最小元素的迭代器
max_element(begin, end); // 找到区间中最大元素的迭代器
find(begin, end, value); // 在区间中查找值为value的元素的迭代器
count(begin, end, value); // 统计区间中值为value的元素的个数
// 定义
struct Person {
    string name;
    int age;
};
bool compare(Person p1, Person p2) { // 自定义排序函数,按照年龄从小到大排序
    return p1.age < p2.age;
}

#include <algorithm>
using namespace std;
vector<int> v = {3, 1, 4, 1, 5, 9, 2, 6, 5, 3};
// 对vector进行排序
sort(v.begin(), v.end()); // 按照默认规则(从小到大)排序
sort(v.rbegin(), v.rend()); // 按照从大到小排序
// 对vector进行翻转
reverse(v.begin(), v.end());
// 对vector进行旋转
rotate(v.begin(), v.begin() + 3, v.end()); // 将前三个元素旋转到vector末尾
// 去除vector中相邻的重复元素
v.erase(unique(v.begin(), v.end()), v.end());
// 找到vector中的最小元素和最大元素
int min_element = *min_element(v.begin(), v.end());
int max_element = *max_element(v.begin(), v.end());
// 在vector中查找某个元素
auto it = find(v.begin(), v.end(), 5); // 查找元素5在vector中的位置
if (it != v.end()) {
    cout << "5 found in vector" << endl;
} else {
    cout << "5 not found in vector" << endl;
}
// 统计vector中某个元素的个数
int count = count(v.begin(), v.end(), 5); // 统计vector中元素5的个数

#include <algorithm>
#include <vector>
#include <string>
using namespace std;
vector<Person> people = {{"Alice", 20}, {"Bob", 18}, {"Charlie", 22}};
// 自定义排序
sort(people.begin(), people.end(), compare); // 按照年龄从小到大排序
// 自定义查找
auto it = find_if(people.begin(), people.end(), [](const Person& p) {
    return p.name == "Alice";
}); // 查找名字为"Alice"的人在people中的位置
if (it != people.end()) {
    cout << "Alice found in people" << endl;
} else {
    cout << "Alice not found in people" << endl;
}
// 自定义操作
vector<string> names;
transform(people.begin(), people.end(), back_inserter(names), [](const Person& p) {
    return p.name;
}); // 将people中的人的名字提取出来,存储到names中

标签:begin,end,algorithm,people,元素,算法,vector,排序
From: https://www.cnblogs.com/full-stack-linux-new/p/17343274.html

相关文章

  • 八大排序算法(c语言实现)
    title:八大排序算法(c语言实现)小知识:1)八大排序算法皆是内部排序。2)稳定的算法在排序的过程中不会改变元素彼此的位置的相对次序。反之不稳定的算法会经常改变这个相对次序。排序方法时间复杂度(平均)时间复杂度(最坏)时间复杂度(最好)空间复杂度稳定性冒泡排序O(n^2)......
  • [tarjan强连通分量算法] 目的,图解,思路,伪代码,实例
    强连通分量算法(Tarjan'sStronglyConnectedComponentAlgorithm)利用深度优先算法找到一个非强连通的有向图中的所有强连通子图。无向图可以被认为是同时具备u->v和v->u的图。一些概念强连通:在有向图中,任意点u与v之间存在有来回两个方向的通路,类似存在一个环;强连通图:图......
  • A Comparison and Evaluation of Multi-View Stereo Reconstruction Algorithms
    介绍多视图立体重建是计算机视觉领域中一个非常重要的研究方向,它可以应用于三维建模、虚拟现实、机器人导航等多个领域。然而,目前多视图立体重建领域存在着很多问题和挑战,例如精度不高、完整性不足等。因此,作者希望通过本文对当前主流算法进行比较和评估,为该领域的进一步发展提供......
  • 扎实打牢数据结构算法根基,从此不怕算法面试系列之002 week01 02-02 线性查找法
    1、线性查找法什么是线性查找法?举例:在一沓试卷中,找到属于自己的那张试卷。第1张:不是第2张:不是第3张:不是……第n张:是,找到了!第n+1张:不找了……这个解决问题的思路和过程体现就是线性查找法的思想。2、线性查找法思路梳理线性查找法,就是在线性的数据结构中来完成。例如:在data数......
  • 扎实打牢数据结构算法根基,从此不怕算法面试系列之001 week01 02-01 什么是算法?
    1、什么是算法?为了明确什么是算法,我们会从简单的查找功能开始讲起。查找其实一个一个非常简单的算法,但我们会为这个查找功能的算法做如下工作:让查找的功能适应更多的数据类型通过查找的例子讲解如何编写正确的程序?为查找算法性能测试对一些常见算法做复杂度分析2、定义算法Algorit......
  • 扎实打牢数据结构算法根基,从此不怕算法面试系列之006 week01 02-06 循环不变量
    循环不变量1、循环开始时需要做什么?之前我们讲的线性查找法的核心代码如下:publicstatic<E>intsearch(E[]data,Etarget){for(inti=0;i<data.length;i++)if(data[i].equals(target))returni;return-1;}我们是否有思考过,这样一个......
  • 扎实打牢数据结构算法根基,从此不怕算法面试系列之007 week01 02-07 简单的复杂度分析
    1、复杂度分析复杂度分析本身是非常理论化的一个内容,在计算机科学中,有一个专门的学科叫做——计算复杂性理论。很多童鞋看过《算法导论》,这本书的内容很多很强调算法导论。但是实际上,对于普通程序员来说,不需要过度强调理论化的内容。因为工作中更多面对的是实际的软件工程,工程化的......
  • 扎实打牢数据结构算法根基,从此不怕算法面试系列之003 week01 02-03 代码实现线性查找
    1、算法描述在数组中逐个查找元素,即遍历。2、思路原理如算法描述,基本是最简单的代码块了,没有什么额外的原理。3、初步的代码实现线性查找法初步的代码实现:packagecom.mosesmin.datastructure.week01.chap02;/***@Misson&Goal代码以交朋友、传福音*@ClassNameLinearSearc......
  • 文章学习:基于AVX-512指令集的同态加密算法中大整数运算性能优化与突破
    学习文章:英特尔×同态科技|基于AVX-512指令集的同态加密算法中大整数运算性能优化与突破文章人工智能的安全隐患ChatGPT的成功大部分来源于海量的数据支撑和丰富的数据维度,基于13亿参数量的庞大模型,随着用户的不断涌入,ChatGPT不断迭代进化新的“知识”,而在模型表达能力的增......
  • 02-目录---数据结构与算法
    第01章:数组(即顺序表)的基本实现数组头文件定义:链接初始化、清空、销毁数组:链接输入元素创建数组、打印数组:链接数组扩容:链接在数组尾部追加若干元素:链接插入元素x:链接按位置删除元素:链接删除元素x:链接定位元素x:链接第02章:数组其他算法实现合并数组:链接1:链接2:链接3:链......