C++之常用通用算法

这篇具有很好参考价值的文章主要介绍了C++之常用通用算法。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

背景
C++ 是一种强大的编程语言,它提供了许多通用算法,可以用于各种容器类型。这些算法是通过迭代器来操作容器中的元素,因此它们是通用的,可以用于不同类型的容器。在本篇博客中,我们将详细介绍 C++ 的通用算法。

1、std::sort()
std::sort() 是 C++ 中最常用的算法之一,它可以对容器中的元素进行排序。该算法使用快速排序算法实现,时间复杂度为 O(n log n)。以下是一个使用 std::sort() 对数组进行排序的示例:

#include <algorithm>
#include <iostream>

int main() {
    int arr[] = { 3, 1, 4, 1, 5, 9, 2, 6, 5, 3 };
    int n = sizeof(arr) / sizeof(arr[0]);

    std::sort(arr, arr + n);

    for (int i = 0; i < n; i++) {
        std::cout << arr[i] << " ";
    }
    std::cout << std::endl;

    return 0;
}

使用 std::sort() 对数组 arr 进行排序,并使用循环打印排序后的结果。

2、std::find()
std::find() 可以在容器中查找指定的元素。该算法返回一个迭代器,指向第一个匹配的元素。如果没有找到匹配的元素,则返回容器的 end() 迭代器。以下是一个使用 std::find() 查找向量中的元素的示例:

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

int main() {
    std::vector<int> vec = { 3, 1, 4, 1, 5, 9, 2, 6, 5, 3 };
    int x = 5;

    auto it = std::find(vec.begin(), vec.end(), x);

    if (it != vec.end()) {
        std::cout << "Found " << x << " at position " << it - vec.begin() << std::endl;
    } else {
        std::cout << "Not found" << std::endl;
    }

    return 0;
}

在上面的示例中,我们使用 std::find() 在向量 vec 中查找元素 x,并打印结果。

3、std::accumulate()
std::accumulate() 可以计算容器中元素的总和。该算法需要两个迭代器和一个初始值作为参数。以下是一个使用 std::accumulate() 计算数组元素总和的示例:

#include <algorithm>
#include <iostream>

int main() {
    int arr[] = { 3, 1, 4, 1, 5, 9, 2, 6, 5, 3 };
    int n = sizeof(arr) / sizeof(arr[0]);

    int sum = std::accumulate(arr, arr + n, 0);

    std::cout << "Sum: " << sum << std::endl;

    return 0;
}

在上面的示例中,我们使用 std::accumulate() 计算数组 arr 中元素的总和,并打印结果。

4、std::transform()
std::transform() 可以对容器中的元素进行转换。该算法需要两个迭代器和一个转换函数作为参数。以下是一个使用 std::transform() 将数组中的元素乘以 2 的示例:

#include <algorithm>
#include <iostream>

int main() {
    int arr[] = { 3, 1, 4, 1, 5, 9, 2, 6, 5, 3 };
    int n = sizeof(arr) / sizeof(arr[0]);

    std::transform(arr, arr + n, arr, [](int x) { return x * 2; });

    for (int i = 0; i < n; i++) {
        std::cout << arr[i] << " ";
    }
    std::cout << std::endl;

    return 0;
}

在上面的示例中,我们使用 std::transform() 将数组 arr 中的元素乘以 2,并使用循环打印结果。

5、std::copy()
std::copy() 可以将容器中的元素复制到另一个容器中。该算法需要两个迭代器和一个目标容器的迭代器作为参数。以下是一个使用 std::copy() 将数组中的元素复制到向量中的示例:

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

int main() {
    int arr[] = { 3, 1, 4, 1, 5, 9, 2, 6, 5, 3 };
    int n = sizeof(arr) / sizeof(arr[0]);

    std::vector<int> vec(n);
    std::copy(arr, arr + n, vec.begin());

    for (int i = 0; i < n; i++) {
        std::cout << vec[i] << " ";
    }
    std::cout << std::endl;

    return 0;
}

以上使用 std::copy() 将数组 arr 中的元素复制到向量 vec 中,并使用循环打印结果。

6、std::reverse()
std::reverse() 可以反转容器中的元素顺序。该算法需要两个迭代器作为参数。以下是一个使用 std::reverse() 反转数组中的元素顺序的示例:

#include <algorithm>
#include <iostream>

int main() {
    int arr[] = { 3, 1, 4, 1, 5, 9, 2, 6, 5, 3 };
    int n = sizeof(arr) / sizeof(arr[0]);

    std::reverse(arr, arr + n);

    for (int i = 0; i < n; i++) {
        std::cout << arr[i] << " ";
    }
    std::cout << std::endl;

    return 0;
}

在上面的示例中,我们使用 std::reverse() 反转数组 arr 中的元素顺序,并使用循环打印结果。

7、std::unique()
std::unique() 可以从容器中删除重复的元素。该算法需要两个迭代器作为参数,并返回一个迭代器,指向不重复的元素的末尾。以下是一个使用 std::unique() 删除向量中重复元素的示例:

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

int main() {
    std::vector<int> vec = { 3, 1, 4, 1, 5, 9, 2, 6, 5, 3 };
    std::sort(vec.begin(), vec.end());

    auto it = std::unique(vec.begin(), vec.end());
    vec.erase(it, vec.end());

    for (int i = 0; i < vec.size(); i++) {
        std::cout << vec[i] << " ";
    }
    std::cout << std::endl;

    return 0;
}

在上面的示例中,我们使用 std::unique() 删除向量 vec 中的重复元素,并使用循环打印结果。

8、std::for_each()
std::for_each() 可以对容器中的每个元素执行指定的操作。该算法需要两个迭代器和一个函数对象作为参数。以下是一个使用 std::for_each() 对数组中的元素进行平方的示例:

#include <algorithm>
#include <iostream>

int main() {
    int arr[] = { 3, 1, 4, 1, 5, 9, 2, 6, 5, 3 };
    int n = sizeof(arr) / sizeof(arr[0]);

    std::for_each(arr, arr + n, [](int& x) { x *= x; });

    for (int i = 0; i < n; i++) {
        std::cout << arr[i] << " ";
    }
    std::cout << std::endl;

    return 0;
}

在上面的示例中,我们使用 std::for_each() 对数组 arr 中的元素进行平方,并使用循环打印结果。

最后:
C++ 的通用算法可以大大简化编写 C++ 程序的过程,因为它们提供了一种通用的方法来处理容器中的元素,而不需要编写特定于容器类型的代码。此外,这些算法已经经过优化,因此它们通常比手动编写的代码更快、更可靠。在实际编程中,我们应该熟练掌握这些算法,并根据需要选择合适的算法来处理容器中的元素。文章来源地址https://www.toymoban.com/news/detail-454469.html

到了这里,关于C++之常用通用算法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • R语言 一种功能强大的数据分析、统计建模 可视化 免费、开源且跨平台 的编程语言

    R语言是一种广泛应用于数据分析、统计建模和可视化的编程语言。它由新西兰奥克兰大学的罗斯·伊哈卡和罗伯特·杰特曼开发,并于1993年首次发布。R语言是一个免费、开源且跨平台的语言,它在统计学和数据科学领域得到了广泛的应用。 R语言具有丰富的数据处理、统计分

    2024年02月07日
    浏览(51)
  • 几种常用编程语言的区别

    计算机编程语言是指用于人与计算机之间通信的语言,是人与计算机之间传递信息的媒介,因为它是用来进行程序设计的,所以又称程序设计语言或者编程语言。 计算机语言是一种特殊的语言。因为它是用于人与计算机之间传递信息的,所以人和计算机都能“读懂”。具体地

    2023年04月13日
    浏览(36)
  • 数学建模常用软件或编程语言

    MATLAB(Matrix Laboratory)是一种强大的数值计算和科学编程软件。它提供了丰富的数学函数和工具,用于数据分析、算法开发、信号处理、图像处理、控制系统设计、仿真等应用领域。 MATLAB具有直观的语法,使得用户能够快速进行数值计算和数据可视化。用户可以使用MATLAB进行

    2024年02月03日
    浏览(48)
  • 【编程】C++语言编程规范-2

    结合C++ Effective系列参考树、尤其是工程经验教训的总结。 并发 除非必要,尽量少用线程。 多线程编程要守护好内存,使用atomic、mutex、condition variable、future、semaphore、latch、barrier等同步机制避免数据竞争。 尽量缩小临界区,临界区指独占的资源,禁止其他线程访问变量的代

    2024年02月21日
    浏览(50)
  • 常用编程语言排行与应用场景汇总(2023.10)

    截止到2023年10月,TIOBE社区公布的编程语言排行榜,排名前20: 趋势: 其他语言: Python是一种高级的、通用的编程语言,被广泛应用于多个领域。以下是Python的一些常见应用场景: Web开发:Python的Web框架(如Django和Flask)和Web开发工具使其成为开发Web应用程序的理想选择。它

    2024年02月06日
    浏览(36)
  • 什么是硬件编程,C 语言如何进行硬件编程?C 语言常用的操作系统有哪些?

    硬件编程是指使用编程语言与硬件交互,控制硬件设备的行为和功能。其中,C语言是一种广泛用于硬件编程的高级编程语言。 C语言通过直接操作内存来进行硬件编程。它提供了一些特殊的和库函数,使得开发者可以直接访问和操作硬件设备的寄存器、端口和外设等。

    2024年02月15日
    浏览(54)
  • 云原生时代崛起的编程语言Go常用标准库实战

    @ 目录 基础标准库 简述 字符串-string 底层结构 函数 长度 格式化输出 模版-template text/template html/template 正则表达式-regexp 编码-encoding Base64 JSON XML 时间-time 网络-net URL HTTP客户端和服务端 加密 IO操作 读写文件 环境变量 命令行 数据库 排序-sort 测试和基准测试 Go语言的标准库覆

    2024年02月02日
    浏览(39)
  • 什么是T-SQL编程?T-SQL是Transact-SQL的缩写,是一种扩展了SQL(结构化查询语言)的编程语言,用于Microsoft SQL Server数据库管理系统中的数据管理和操作。T-

    什么是T-SQL编程? T-SQL是Transact-SQL的缩写,是一种 扩展了SQL(结构化查询语言) 的编程语言,用于Microsoft SQL Server数据库管理系统中的数据管理和操作。T-SQL支持创建 存储过程、触发器、函数 等高级特性,能够更加灵活地进行数据操作和处理。基本的T-SQL语法与标准SQL很相

    2024年01月21日
    浏览(91)
  • 判断字符串是否为回文的三种常用编程语言实现

    引言:回文是一种具有镜像对称性的字符串,即它从左到右读和从右到左读是相同的。回文可以在文学、语言学、数学、计算机科学等领域中得到广泛应用。在计算机科学中,判断一个字符串是否为回文是一项基本的算法挑战。在本文中,我们将介绍三种常见的编程语言中用

    2024年02月03日
    浏览(51)
  • Rust 是一种面向系统编程语言 主要被设计用来解决执行速度、安全性、并发性和可靠性等方面的问题 Rust From First Principles: Building a Minimal Rust

    作者:禅与计算机程序设计艺术 Rust 是一种面向系统编程语言,主要被设计用来解决执行速度、安全性、并发性和可靠性等方面的问题。相比于其他语言来说,它拥有以下优点: 高性能: Rust 的运行时是单线程的,但是拥有基于垃圾收集(GC)的自动内存管理机制,使得在开

    2024年02月07日
    浏览(52)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包