我為自己設定了一個挑戰,即嘗試撰寫一個程式來檢測給定向量是否是回文。這是代碼:
#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";
}
}
當我運行代碼時,無論向量的值是奇數還是偶數,它都會回傳 false。我嘗試了各種故障排除步驟,但似乎無法使其正常作業。
(MinGW64、Windows 10、VS 代碼)
uj5u.com熱心網友回復:
如果您學習如何使用標準庫提供的演算法,強烈推薦:
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));
}
現場測驗
uj5u.com熱心網友回復:
C 標準未定義以下行的行為:
if (nums[i] == nums[nums.size() - i])
..因為向量下標超出范圍,因為:
nums[nums.size() - i]
..對于第一個回圈,這意味著:
nums[5]
..這絕對超出范圍。所以只需添加-1一個nums.size() - i:
nums[nums.size() - i - 1]
當 a是回文時,這將列印出來"My Code Works"(即 return )。truestd::vector
此外,這將是您的代碼的更短和更好的版本:
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;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/441495.html
