Проверка границ 2D-массива с использованием std :: vector и .at () - PullRequest
1 голос
/ 10 октября 2011

У меня довольно простой вопрос, но ведьма не может найти ответ.

Как я могу использовать .at(i) в двумерном массиве vector < vector <type> >?

Я хочуиметь проверку границ - ведьма .at(i) обеспечивает функцию автоматически, но я могу получить доступ только к моему массиву, используя array[i][j], ведь ведь она не обеспечивает проверку границ.

Ответы [ 3 ]

4 голосов
/ 10 октября 2011

Правильный синтаксис:

array.at(i).at(j)
3 голосов
/ 10 октября 2011

Поскольку .at(i) возвратит ссылку на vector в v[i], используйте .at(i).at(j).

2 голосов
/ 10 октября 2011

Используйте 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
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...