C++ 中检测向量是否为回文

Noa*_*ell 0 c++ vector palindrome

我给自己设定了一个挑战,尝试编写一个程序来检测给定的向量是否是回文。这是代码:

#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";
    }
}
Run Code Online (Sandbox Code Playgroud)

当我运行代码时,无论向量的值是奇数还是偶数,它都会返回 false。我尝试了各种故障排除步骤,但似乎无法使其工作。

(MinGW64、Windows 10、VS 代码)

Mar*_*k R 12

如果您学习如何使用标准库提供的算法,强烈推荐:

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));
}
Run Code Online (Sandbox Code Playgroud)

现场测试

  • 可能值得指出的是,“/ 2”的整数除法效果意味着不考虑奇数长度序列的中间元素,这当然是正确的做法;pop 和 poop 都是回文。 (2认同)