C ++向量类抛出异常

时间:2014-04-15 11:36:07

标签: c++ vector

我创建了一个包含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...
   }

2 个答案:

答案 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)