使用std :: vector和.at()检查2D数组边界

时间:2011-10-10 15:16:25

标签: c++ vector multidimensional-array

我有一个非常简单的问题,但对于女巫,我找不到答案。

如何在.at(i)的二维数组中使用vector < vector <type> >

我想要检查边界 - 巫婆.at(i)函数会自动提供,但我只能使用array[i][j]来访问我的数组,但不提供边界检查。

3 个答案:

答案 0 :(得分:4)

使用的正确语法是:

array.at(i).at(j)

答案 1 :(得分:3)

由于.at(i)会在vector处返回对v[i]的引用,请使用.at(i).at(j)

答案 2 :(得分:2)

使用vec.at(i).at(j)并且必须在try-catch块中使用此项,因为如果索引无效,at()会抛出std::out_of_range异常:

try
{
      T & item = vec.at(i).at(j);
}
catch(const std::out_of_range & e)
{
     std::cout << "either index i or j is out of range" << std::endl;
}

编辑:

正如你在评论中所说:

  

我实际上希望程序在发生异常时停止。 - jbssm 5分钟前

在这种情况下,您可以在打印超出范围的消息后在catch块中重新抛出,以便您可以知道它停止的原因。以下是重新抛出的方式:

catch(const std::out_of_range & e)
{
     std::cout << "either index i or j is out of range" << std::endl;
     throw; //it rethrows the excetion
}