我应该如何捕获 out_of_range 异常?

How I should to catch out_of_range exceptions?

我的代码中有 out_of_range。我该如何解决这个问题?有2个功能。第一个函数检查字符串是否为回文。第二个函数必须从向量中找到回文并将其复制到一个新向量,该向量是一个 return 值。

#include "pch.h"
#include <iostream>
#include <string>
#include <algorithm>
#include <vector>

using namespace std;

bool IsPalindrom(string a)
{   
    string b = a;

    reverse(a.begin(), a.end());

    if (b == a)
    {
         cout << "success " << endl;
         return true;
    }
    else {
        cout << "error";
        return false;
    }
}

vector<string> PalindromFilter(vector<string> words, int minLength)
{
    vector<string> pol;

    for (int i = 0; i <= words.size(); ++i)
    {
        if (IsPalindrom(words[i]) && words[i].size() > minLength)
        {
            pol.at(i) = words.at(i);
        }
    }
    return pol;
}

int main()
{
    vector<string> a = { "ama", "madam", "safg", "arnold", "dad", "dd" };

    PalindromFilter(a, 2);

}

您正在访问循环中超出范围的 words。另外pol是空的,所以需要用push_back来添加新的元素。

vector<string> pol;

for (int i = 0; i < words.size(); ++i)
{
    if (IsPalindrom(words[i]) && words[i].size() > minLength)
    {
        pol.push_back(words.at(i));
    }
}
return pol;

您可以使用 try catch 块捕获异常:

try{
PalindromFilter(a, 2);
}
catch(const std::out_of_range& e){
  //std::cout <<"Error: "  << e.what(); //to print the exception description
  //or do whatever
}

然而,这并不能使您的程序正常运行,您需要解决 Palindrome 方法问题。

在您的 for 循环中,在最后一次迭代中,您的 words 向量访问是 out_of_bounds。使用 < 而不是 <=.

这:pol.at(i) = words.at(i);无效,pol.at(i)在分配内存之前不存在,可以使用vector push_back()方法,pol.push_back(words[i]);