在 C++ 中检测向量是否为回文
Detect if a vector is a palindrome in C++
我给自己设定了一个挑战,尝试编写一个程序来检测给定向量是否为回文。这是代码:
#include <iostream>
#include <vector>
bool isPalindromeArray(std::vector<int>& nums) {
float size = nums.size()/2;
int k = 0;
if(size = int(size)) {
for(int i = 0; i < size; i++) {
if(nums[i] == nums[nums.size() - i]) {
k++;
if(k == size) {
return true;
}
}
}
} else {
for(int i = 0; i < int(size) - 1 ; i++) {
if(nums[i] == nums[(int(size) - 1) - i]) {
k++;
if(k == int(size) - 1) {
return true;
}
}
}
}
return false;
}
int main() {
std::vector<int> arr;
arr.push_back(1);
arr.push_back(2);
arr.push_back(3);
arr.push_back(2);
arr.push_back(1);
if(isPalindromeArray(arr)) {
std::cout << "My Code Works";
}
}
当我 运行 代码时,无论向量的值是奇数还是偶数,它 returns 都是假的。我尝试了各种故障排除步骤,但似乎无法正常工作。
(MinGW64, Windows 10, VS 代码)
C++ 标准未定义以下行的行为:
if (nums[i] == nums[nums.size() - i])
..因为矢量下标超出范围,因为:
nums[nums.size() - i]
..对于第一个循环,这意味着:
nums[5]
..这绝对超出了范围。所以只需在 nums.size() - i
中添加一个 -1
:
nums[nums.size() - i - 1]
当 std::vector
是回文时,这将打印出 "My Code Works"
(即 return true
)。
此外,这将是您的代码的更短更好的版本:
bool isPalindromeArray(std::vector<int>& nums) {
int size = nums.size() / 2;
for (int i = 0; i < size; i++) {
if (nums[i] != nums[nums.size() - i - 1]) {
return false;
}
}
return true;
}
如果您学习如何使用标准库提供的算法,强烈推荐:
template <typename T>
bool is_palindrome(const T& container)
{
return std::equal(std::begin(container),
std::begin(container) + std::size(container) / 2,
std::rbegin(container));
}
我给自己设定了一个挑战,尝试编写一个程序来检测给定向量是否为回文。这是代码:
#include <iostream>
#include <vector>
bool isPalindromeArray(std::vector<int>& nums) {
float size = nums.size()/2;
int k = 0;
if(size = int(size)) {
for(int i = 0; i < size; i++) {
if(nums[i] == nums[nums.size() - i]) {
k++;
if(k == size) {
return true;
}
}
}
} else {
for(int i = 0; i < int(size) - 1 ; i++) {
if(nums[i] == nums[(int(size) - 1) - i]) {
k++;
if(k == int(size) - 1) {
return true;
}
}
}
}
return false;
}
int main() {
std::vector<int> arr;
arr.push_back(1);
arr.push_back(2);
arr.push_back(3);
arr.push_back(2);
arr.push_back(1);
if(isPalindromeArray(arr)) {
std::cout << "My Code Works";
}
}
当我 运行 代码时,无论向量的值是奇数还是偶数,它 returns 都是假的。我尝试了各种故障排除步骤,但似乎无法正常工作。
(MinGW64, Windows 10, VS 代码)
C++ 标准未定义以下行的行为:
if (nums[i] == nums[nums.size() - i])
..因为矢量下标超出范围,因为:
nums[nums.size() - i]
..对于第一个循环,这意味着:
nums[5]
..这绝对超出了范围。所以只需在 nums.size() - i
中添加一个 -1
:
nums[nums.size() - i - 1]
当 std::vector
是回文时,这将打印出 "My Code Works"
(即 return true
)。
此外,这将是您的代码的更短更好的版本:
bool isPalindromeArray(std::vector<int>& nums) {
int size = nums.size() / 2;
for (int i = 0; i < size; i++) {
if (nums[i] != nums[nums.size() - i - 1]) {
return false;
}
}
return true;
}
如果您学习如何使用标准库提供的算法,强烈推荐:
template <typename T>
bool is_palindrome(const T& container)
{
return std::equal(std::begin(container),
std::begin(container) + std::size(container) / 2,
std::rbegin(container));
}