C++向量类抛出异常



我创建了一个包含4个字符串的向量,现在我想从第一个到最后一个读取每个字符串,并将字符串存储在exr中。我使用的是这段代码,但一旦j变为3,它就会抛出异常,因此不会提取最后一个值,也不会捕获异常。cc是一个字符串向量。我使用了调试器,字符串在向量中。有了这段代码,我只需要处理每个字符串,直到没有其他字符串为止。这就是为什么当我捕捉到使用break跳出for循环的异常时,索引比向量中的实际元素大。

   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...
   }

我预计向量没有您预期的那么大。使用向量的size()方法,而不是对照index检查范围。例如:

for (size_t j = 0; j < cc.size(); ++j)

您有以下代码:

对于(int j=0;j<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) 

最新更新