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容器反转后与原始数组进行比较。