我创建了一个包含4个字符串的向量,现在我想从第一个到最后一个读取每个字符串并将字符串存储在exr中。我正在使用此代码,但是一旦j变为3,它就会抛出异常,因此不会提取最后一个值,也不会捕获异常。 cc是一个字符串向量。我使用了调试器,字符串在向量中。使用这段代码我只需要处理每个字符串,直到没有更多为什么当我捕获异常时我使用break跳出for循环,index大于向量中的实际元素。
std::vector<string> cc;
std::vector<string>::iterator it;
it = cc.end();
// code that stores 4 strings in cc....
....
string exr;
for (int j = 0; j < index; j++)
{
try
{
exr = cc.at(j);
}
catch (out_of_range d)
{
break;
}
//other code that use exr...
}
答案 0 :(得分:2)
我希望矢量不像你期望的那么大。不使用index
检查范围,而是使用向量的size()
方法。 E.g:
for (size_t j = 0; j < cc.size(); ++j)
答案 1 :(得分:1)
您有以下代码:
for(int j = 0; j&lt; index; j ++)
但是index
的价值是多少?它等于矢量大小吗?
您可能希望在for循环中使用std::vector::size()
:
for (size_t j = 0; j < cc.size(); ++j)
或者您可以使用基于范围的for循环(自C ++ 11起可用):
// Use const auto& for observing the strings in the vector:
for (const auto& exr : cc)
另请注意,引用应该捕获异常以避免深层拷贝:
// Your code:
// catch (out_of_range d)
//
// Better:
catch(const out_of_range& d)