我应该如何捕获 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]);
我的代码中有 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]);