首页 > 编程语言 >C++(#include <algorithm>)

C++(#include <algorithm>)

时间:2024-09-06 09:28:17浏览次数:7  
标签:std begin end int C++ vector include

目录



#include <algorithm> 是 C++ 标准库中的一个头文件,包含了许多常用的算法函数,提供了操作容器、范围和数据的功能。这个库中的算法大多数是通用的,可以应用于不同的数据结构,比如数组、向量、列表等。

大多数 <algorithm> 中的函数都遵循以下基本语法:

algorithm_name(container.begin(), container.end(), ...);

这里的 container 是一个容器对象,begin()end() 是容器的成员函数,返回指向容器开始和结束的迭代器。



1. std::sort

对范围内的元素进行升序排序。

sort(container.begin(), container.end(), compare_function);

其中 compare_function 是一个可选的比较函数,用于自定义排序方式。

示例:

#include <algorithm>
#include <vector>

int main() {
    std::vector<int> v = {5, 2, 9, 1, 5, 6};
    std::sort(v.begin(), v.end());  // 对 vector 进行升序排序
    return 0;
}


2. std::reverse

将范围内的元素顺序逆转。

示例:

#include <algorithm>
#include <vector>

int main() {
    std::vector<int> v = {1, 2, 3, 4, 5};
    std::reverse(v.begin(), v.end());  // 将 vector 中的元素顺序颠倒
    return 0;
}


3. std::find

在范围内查找等于某个值的第一个元素,返回指向该元素的迭代器。

auto it = find(container.begin(), container.end(), value);

示例:

#include <algorithm>
#include <vector>
#include <iostream>

int main() {
    std::vector<int> v = {10, 20, 30, 40, 50};
    auto it = std::find(v.begin(), v.end(), 30);  // 查找值为 30 的元素
    if (it != v.end()) {
        std::cout << "Found: " << *it << std::endl;
    }
    return 0;
}


4. std::copy

将一个范围内的元素复制到另一个容器或数组。

copy(source_begin, source_end, destination_begin);

示例:

#include <algorithm>
#include <vector>
#include <iostream>

int main() {
    std::vector<int> src = {1, 2, 3, 4, 5};
    std::vector<int> dest(5);
    std::copy(src.begin(), src.end(), dest.begin());  // 复制元素
    return 0;
}


5. std::equal

比较两个容器或两个范围内的元素是否相等。

bool result = equal(first1, last1, first2);
或
bool result = equal(first1, last1, first2, compare_function);

示例:

#include <algorithm>
#include <vector>
#include <iostream>

int main() {
    std::vector<int> v1 = {1, 2, 3, 4, 5};
    std::vector<int> v2 = {1, 2, 3, 4, 5};

    bool are_equal = std::equal(v1.begin(), v1.end(), v2.begin());
    std::cout << (are_equal ? "Vectors are equal." : "Vectors are not equal.") << std::endl;

    return 0;
}

输出:

Vectors are equal.


6. std::for_each

对范围内的每个元素执行给定的操作。

示例:

#include <algorithm>
#include <vector>
#include <iostream>

int main() {
    std::vector<int> v = {1, 2, 3, 4, 5};
    std::for_each(v.begin(), v.end(), [](int &n){ n *= 2; });  // 将每个元素翻倍
    return 0;
}


7. std::unique

移除相邻的重复元素,返回新范围的末尾迭代器(但并不改变容器的大小)。

示例:

#include <algorithm>
#include <vector>

int main() {
    std::vector<int> v = {1, 1, 2, 2, 3, 4, 4};
    auto new_end = std::unique(v.begin(), v.end());  // 移除相邻的重复元素
    v.erase(new_end, v.end());  // 移除重复元素之后删除冗余的部分
    return 0;
}


8. std::transform

对每个元素应用一个操作,并将结果存储在另一个范围内。

示例:

#include <algorithm>
#include <vector>

int main() {
    std::vector<int> v = {1, 2, 3, 4, 5};
    std::vector<int> result(5);
    std::transform(v.begin(), v.end(), result.begin(), [](int x){ return x * x; });  // 对每个元素求平方
    return 0;
}


总结

<algorithm> 头文件包含了大量的标准算法函数,这些函数操作泛型范围,可以应用于不同类型的容器。这些算法通常不会修改容器的大小,但它们会改变范围内的元素顺序或内容。大多数算法依赖于迭代器来操作容器,从而实现高效和通用的代码。

这个库非常强大且实用,是现代 C++ 编程中的重要组成部分。



标签:std,begin,end,int,C++,vector,include
From: https://www.cnblogs.com/keye/p/18399596

相关文章

  • 南沙信C++陈老师解一本通题: 2031:【例4.17】四位完全平方数
    ​ 题目描述】输出所有形如aabb的四位完全平方数(即前两位数字相等,后两位数字也相等)。【输入】无【输出】由小到大输出,每个数占一行。【输入样例】无【输出样例】无#include<bits/stdc++.h>usingnamespacestd;boolisSquare(intn){ inttmp=(int)sqrt(n......
  • 第十三届蓝桥杯大赛软件赛省赛C/C++ 大学 A 组
    之前没接触过oi赛制打了一下心态小崩。。以为会了五题写出来对了两题,我就是纯纯小丑哈哈。只打了两个小时也不能算正经vp把,就当是一个补题2.灭鼠先锋推必败必胜局面即可。具体的我就是乱推的,对于必胜的可能要稍微多想一会,对于必败的只要找出一种必败情况那显然就是必败了。但是......
  • C++ | 泛型编程:模板初阶与函数模板深度解析
    文章目录C++泛型编程:模板初阶与函数模板深度解析1.泛型编程:实现代码的通用性2.函数模板:代码的模具2.1什么是函数模板?2.2函数模板的格式2.3函数模板的原理2.4函数模板的实例化2.5模板参数的匹配原则3.类模板:更进一步的通用性3.1类模板的定义3.2类模板的实例化......
  • 【C++ 关键字】谈谈你对volatitle、extern 关键字的理解
    文章目录1.volatitle的概念2.volatitle的作用3.1.volatitle的概念......
  • 《C++中的面向对象编程三大特性:封装、继承与多态》
    在C++编程的广阔世界中,面向对象编程(Object-OrientedProgramming,OOP)的三大特性——封装、继承和多态,犹如三把强大的利器,帮助程序员构建出高效、可维护和可扩展的软件系统。本文将深入探讨如何在C++中实现这三大特性,并通过具体的代码示例展示它们的强大之处。一、封装(Enca......
  • 《深入理解 C++中的右值引用:开启高效编程新篇章》
    在C++的编程世界中,右值引用是一个强大而又富有特色的特性,它为程序员提供了更高效的资源管理方式和更灵活的编程手段。本文将带你深入探讨C++中的右值引用,揭示其独特的特点和强大的功能。一、标题背后的意义C++中的右值引用究竟有何特殊之处?为何它成为了C++编程中的热点......
  • 实现一个功能完备的 C++ String 类保姆指南
    本篇博客,我们将详细讲解如何从头实现一个功能齐全且强大的C++String类,并深入到各个细节。这篇博客将包括每一步的代码实现、解释以及扩展功能的探讨,目标是让初学者也能轻松理解。一、简介1.1、背景介绍在C++编程中,std::string类是最常用的字符串处理工具,它提供了丰......
  • C++入门项目:Linux下C++轻量级Web服务器 跑通|运行|测试(小白进)
    TinyWebServer是一个开源的项目,适合小白入门C++网络编程,注意该项目是在linux系统下。Linux下C++轻量级Web服务器,助力初学者快速实践网络编程,搭建属于自己的服务器.使用线程池+非阻塞socket+epoll(ET和LT均实现)+事件处理(Reactor和Proactor均实现)的并发模型使用状......
  • 【C++初窥门庭】C++入门(二)
    目录一、 引用1.1引用概念6.2引用特性6.3常引用 6.4使用场景6.5传值、传引用效率比较6.6引用和指针的区别二、 内联函数2.1概念2.2特性三、auto关键字(C++11)3.1类型别名思考3.2auto简介3.3auto的使用细则 3.4 auto不能推导的场景 四、基于范......
  • c++质因数分解
    质因数分解,最先想到了遍历1-n,找出既是质数也是因数的数。需要用到判断质数函数、while循环,复杂度三次方以上了。#include<iostream>usingnamespacestd;boolzs(intn){ for(inti=2;i<=n/2;i++){ if(n%i==0){ return1; } } return0;}intmai......