C++程序 使用STL检查数组是否回文

C++程序 使用STL检查数组是否回文

C++ STL中,我们可以使用一个叫做std::equal的函数来检查两个区间是否相等。回文字符串或数组是一个非常常见的问题,可以通过检查其正序和逆序是否相等来验证是否为回文。

我们可以使用C++ STL中的std::vector来存储一个数组,因为它可以轻松地进行动态分配和析构,同时可以使用其迭代器来作为std::equal函数的输入。下面是一个简单的示例代码,用于检查一维整数数组是否回文。

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

int main() {
    std::vector<int> numbers = {1, 2, 3, 4, 5, 4, 3, 2, 1};
    bool is_palindrome = std::equal(numbers.begin(), numbers.begin() + numbers.size() / 2, numbers.rbegin());

    if (is_palindrome) {
        std::cout << "The array is a palindrome." << std::endl;
    } else {
        std::cout << "The array is not a palindrome." << std::endl;
    }

    return 0;
}

这个程序首先声明了一个一维数组numbers,然后将其初始化为一个回文数组。然后,程序使用std::equal函数来比较numbers中的前半部分和反转后的后半部分是否相等。

在这个示例中,我们使用了std::vector作为容器,但是你也可以使用传统的C数组或STL数组。下面是一个将C数组转换成STL vector并检查其是否回文的示例代码:

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

const int SIZE = 9;

int main() {
    int numbers[SIZE] = {1, 2, 3, 4, 5, 4, 3, 2, 1};
    std::vector<int> vec(numbers, numbers + SIZE);
    bool is_palindrome = std::equal(vec.begin(), vec.begin() + vec.size() / 2, vec.rbegin());

    if (is_palindrome) {
        std::cout << "The array is a palindrome." << std::endl;
    } else {
        std::cout << "The array is not a palindrome." << std::endl;
    }

    return 0;
}

这个程序首先声明了一个长度为9的整数数组numbers,由于STL vector有更好的内存处理能力,我们将其用std::vector初始化。然后,我们就可以使用std::equal函数来比较前半部分和后半部分了。这个程序和前面的程序非常相似,只是使用了不同的容器类型。

值得注意的是,我们使用了vec.rbegin()来获取反转后的迭代器,它指向vec的最后一个元素,而不是迭代器的起点。

结论

在本文中,我们讨论了如何使用C++ STL来检查数组是否回文。我们使用了STL容器std::vector来存储数组,它可以使用STL算法std::equal来检查两个区间是否相等。通过使用反转后的迭代器,我们可以将一个STL容器反转后与原始数组进行比较。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程

C++ 示例