📜  C++ STL-algorithm.equal()函数(1)

📅  最后修改于: 2023-12-03 15:13:55.110000             🧑  作者: Mango

C++ STL-algorithm.equal()函数

介绍

C++ 标准模板库(STL)提供了一个强大的 algorithm 头文件,其中的 equal() 函数用于比较两个容器或范围内元素的相等性。

该函数比较两个范围内的元素,并返回一个布尔值,表示两个范围内的元素是否全部相等。它可以用于比较两个容器,也可以用于比较一个容器和一个范围。

语法

equal(first1, last1, first2)

equal(first1, last1, first2, predicate)

参数解释:

  • first1, last1:表示第一个范围的起始和结束迭代器。
  • first2:表示第二个范围的起始迭代器。
  • predicate(可选):一个函数或谓词,用于自定义元素的比较方式。默认情况下,使用 == 运算符比较元素。
返回值
  • 若两个范围内的所有元素都相等,则返回 true
  • 若任何一个元素比较不相等,则返回 false
示例代码
#include <iostream>
#include <algorithm>
#include <vector>

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

    // 比较两个容器是否相等
    bool result = std::equal(vec1.begin(), vec1.end(), vec2.begin());
    if (result) {
        std::cout << "vec1 and vec2 are equal." << std::endl;
    } else {
        std::cout << "vec1 and vec2 are not equal." << std::endl;
    }

    // 使用自定义谓词进行比较
    result = std::equal(vec1.begin(), vec1.end(), vec2.begin(), [](int a, int b) {
        // 比较元素的绝对值大小
        return std::abs(a) == std::abs(b);
    });
    if (result) {
        std::cout << "vec1 and vec2 have equal absolute values." << std::endl;
    } else {
        std::cout << "vec1 and vec2 do not have equal absolute values." << std::endl;
    }

    return 0;
}
解释说明

在上述示例代码中,我们创建了两个整数向量 vec1vec2,它们分别包含相同数量的元素。然后,我们使用 std::equal() 函数比较了这两个向量的相等性。

第一个 std::equal() 调用比较了两个向量的元素是否相等。由于最后一个元素不同,所以返回值为 false

第二个 std::equal() 调用使用了一个自定义的谓词来判断元素是否相等。谓词使用了 std::abs() 函数来比较元素的绝对值大小。由于绝对值相等的元素的数量相同,所以返回值为 true

因此,最终输出的结果是:

vec1 and vec2 are not equal.
vec1 and vec2 have equal absolute values.
总结

std::equal() 函数是 C++ STL 中一个非常有用的算法函数,可以用于比较两个容器或范围内元素的相等性。通过传递自定义的谓词,我们可以实现更灵活的比较方式。这个函数在编写程序时提供了一种简单且高效的方式来判断数据的一致性,请在合适的场景中加以使用。