Форум программистов, компьютерный форум CyberForum.ru

Грамотно обработать ошибку std::exception - C++

Восстановить пароль Регистрация
 
soican
49 / 23 / 1
Регистрация: 16.11.2011
Сообщений: 329
Записей в блоге: 5
07.02.2014, 00:38     Грамотно обработать ошибку std::exception #1
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
struct Node
{
    Node(int data): data_(data) {}
    int data_; // полезная часть списка
    Node* next; // указатель на следующий элемент
    Node* operator[](int pos)
    {
      Node* xptr = this;
      for (int i = 0; i < pos; ++i)
      {
       if ( xptr->next != nullptr)
        xptr = xptr->next;
       else
        std::cerr << "Out of Range error: " << std::endl;
      }
      return xptr;
    }
};
Node* toList(const std::vector<int>& array) //(int array[], size_t n) создаем список из вектора
{    Node* list = nullptr;
    for (size_t i = 0; i != array.size(); ++i)
        list = prepend(list, new Node(array[i]));
    return list;
}
Никогда не работал раньше с обработчиком ошибок, вот хочу начать.
Допустим
C++
1
2
3
int mas[] = {10, 20, 30, 40};
std::vector<int> vec(mas, mas + sizeof(mas)/sizeof(int) );
Node* spisok = toList(vec);
Вот пишу
std::cout << (*spisok)[3]->data_; - работает
std::cout << (*spisok)[100]->data_; - как сделать, чтоб грамотно все выдовало через std::exception, а то в моём варианте вернет последний узел и нафигачит "Out of Range error: "

Добавлено через 6 минут
C++
1
2
3
4
5
Node* prepend(Node* list, Node* node) // вставляет узел в голову, возвращает указатель на голову
{  if (node != nullptr)
        node->next = list;
    return node ? node : list;
}
Добавлено через 4 часа 0 минут
кстати, а какой вид ошибки будет при nullptr->?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
0x10
2425 / 1597 / 232
Регистрация: 24.11.2012
Сообщений: 3,919
07.02.2014, 05:37     Грамотно обработать ошибку std::exception #2
Цитата Сообщение от soican Посмотреть сообщение
как сделать, чтоб грамотно все выдовало через std::exception
C++
1
2
3
4
if (xptr->next != nullptr)
    xptr = xptr->next;
else
    throw std::out_of_range("custom message");
http://www.cplusplus.com/reference/s.../out_of_range/
gray_fox
07.02.2014, 06:30
  #3

Не по теме:

soican, вообще плохая идея с оператором индексации для списка - линейная сложность всё таки...

soican
49 / 23 / 1
Регистрация: 16.11.2011
Сообщений: 329
Записей в блоге: 5
07.02.2014, 15:46  [ТС]     Грамотно обработать ошибку std::exception #4
Цитата Сообщение от gray_fox Посмотреть сообщение
soican, вообще плохая идея с оператором индексации для списка - линейная сложность всё таки...
я его использую как вспомогательный для создания начальных условий для выполнения учебных заданий
Yandex
Объявления
07.02.2014, 15:46     Грамотно обработать ошибку std::exception
Ответ Создать тему
Опции темы

Текущее время: 20:19. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru