Восстановление из вектора вне досягаемости ошибки - PullRequest
0 голосов
/ 30 декабря 2011

возможно ли исправить ошибку "недосягаемый вектор" в C ++?

Как эта функция:

vector<int> numbers;

bool isAccessable(int i)
{
   try
   {
  numbers[i];
   catch (...)
    {
    return false;
    }

return true;
}

это возможно в C #, но в C ++?

Ответы [ 3 ]

3 голосов
/ 30 декабря 2011

Если вы просто хотите проверить, находится ли индекс в диапазоне, то просто:

return i < numbers.size();

(Вы также должны либо сравнить с нулем, либо изменить индекс на тип без знака; size_t - это тип, обычно используемый для индексов массива.)

Если вы хотите попытаться получить доступ к значению и выдать исключение, если индекс выходит за пределы диапазона, используйте at вместо []:

try {
    do_something_with(numbers.at(i));
    return true;
} catch (std::out_of_range const &) {
    return false;
}
3 голосов
/ 30 декабря 2011

В C ++ нет проверки диапазона для оператора [], но есть для вектора :: at ().

Попробуйте вместо

numbers.at(i);

.

1 голос
/ 30 декабря 2011

Использовать std::vector::at() функцию-член. Выдает исключение out_of_range.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...