Проверка нижней и верхней границ вектора C ++

я использую [] для доступа к векторам в математическом коде. Я не хочу использовать at() потому что я не люблю исключения. Я счастлив, явно проверяя границы в коде, когда я не уверен в своих показателях. Итак, мой код полон операторов такого рода: if(n >= 0 && n < vec.size()),

Мой вопрос, я не нашел в std::vector звонок как vec.isok(n) который прямо говорит, что если да или же нет индекс в границах.

Я упустил это из виду? это сделало бы для намного более аккуратного кода в моем случае.

Кстати, явная проверка также я считаю более эффективной, чем at() вызов, потому что, как правило, я использую вложенные векторные структуры и когда я проверяю индекс n один раз я потом использую n много раз внутри if кронштейн, иногда тысячи раз. Итак, мой вопрос, вы видите более аккуратный способ сделать это без двух тестов в if, Спасибо!

2

Решение

Да, std::vector не имеет такой вещи, как std::vector::isOK(x), Вы можете деформироваться std::vector в вашем SafeVector и публиковать безопасные интерфейсы для использования.

4

Другие решения

Самый простой способ:

template <typename T>
inline bool isok(const std::vector<T>& vec,
typename std::vector<T>::size_type index)
{
return index >= 0 && index < vec.size();
}

затем назовите это как isok(vec, i)

3

Вы можете иметь собственную реализацию доступа к индексу вектора. И в этой вашей функции вы можете использовать эти чеки (одноразовые инвестиции) и использовать эту функцию для последующего доступа. Но опять же, даже если вы используете эту функцию, вам все равно нужно беспокоиться о том, что она возвращает в случае отсутствия индекса.

Вы также можете перейти на другую структуру данных. Если эти элементы могут иметь ключи (любой уникальный идентификатор), вы можете пойти на карту.

1
По вопросам рекламы [email protected]