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

шаблоны - C++

Восстановить пароль Регистрация
 
Fater
0 / 0 / 0
Регистрация: 18.09.2009
Сообщений: 25
04.01.2011, 23:07     шаблоны #1
помогите с задачей пожалуйста
нужно описать шаблон класса для хранения последовательности пар ключ - значение, написать функцию
возвращающую по заданному ключу индекс этого значения, а также операцию доступа по индексу и функцию возвращающую кол-во хранимых пар, генерировать исключение если соответствующий ключ не найден и если индекс выходит за диапазон.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.01.2011, 23:07     шаблоны
Посмотрите здесь:

C++ шаблоны в си++
C++ Шаблоны
Шаблоны С++ C++
Шаблоны C++
C++ Шаблоны и т.д.(
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
04.01.2011, 23:20     шаблоны #2
Поможем.
Что не получается?
Fater
0 / 0 / 0
Регистрация: 18.09.2009
Сообщений: 25
04.01.2011, 23:30  [ТС]     шаблоны #3
Вот что пока написал
функция правильно написана?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
template <class K, class V, int max>
class Pair{
   private:
      K keys[max];
      V values[max];
      int C;
   public:
      int getIndex(K key);
...
class KeyError{
    public:
       K key;
       KeyError(K k): key(k){}
}
 
template <class K, class V, int max>
int Pair <K,V,max>::getIndex(K key){
   for (int i = 0; i< max; i++)
     if (key==keys[i]) return i;
   throw KeyError(key);
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
04.01.2011, 23:38     шаблоны #4
Да, в этом куске вроде всё так. Так в чём всё-таки вопрос? У вас вроде у самого неплохо получается.
Fater
0 / 0 / 0
Регистрация: 18.09.2009
Сообщений: 25
04.01.2011, 23:40  [ТС]     шаблоны #5
как можно реализовать операцию доступа по индексу?
да и еще где объявить KeyError чтобы в нем использовать тип К?
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
04.01.2011, 23:59     шаблоны #6
Доступ по индексу, думаю, так:

C++
1
2
3
4
5
6
7
8
9
10
11
12
class IndexError
{
};
 
template <class K, class V, int max>
K access_by_index(int index)
{
    if (index < 0 || index >= max)
        throw IndexError ();
 
    return keys[index];
}
А класс KeyError должен быть шаблонным, чтобы в нём можно было тип K использовать.
Fater
0 / 0 / 0
Регистрация: 18.09.2009
Сообщений: 25
05.01.2011, 00:03  [ТС]     шаблоны #7
там же операция доступа по индексу, т.е. нужно перегрузить оператор []
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
05.01.2011, 00:15     шаблоны #8
Тогда так

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
template< class K, class V, int max >
K &Pair< K, V, max >::operator[](int index) const
{
    if (index < 0 || index >= max)
        throw IndexError ();
 
    return keys[index];
}
 
template< class K, class V, int max >
K &Pair< K, V, max >::operator[](int index)
{
    if (index < 0 || index >= max)
        throw IndexError ();
 
    return keys[index];
}
Nick Alte
Эксперт С++
1591 / 983 / 116
Регистрация: 27.09.2009
Сообщений: 1,898
Завершенные тесты: 1
05.01.2011, 12:31     шаблоны #9
Внесу маленькую поправочку. Во-первых, выбрасывать лучше не самопальный IndexError, а std::range_error. Во-вторых, константный оператор доступа должен и возвращать не просто K&, а const K&
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.01.2011, 10:47     шаблоны
Еще ссылки по теме:

Шаблоны C++
Шаблоны C++
Шаблоны C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
06.01.2011, 10:47     шаблоны #10
Nick Alte, на счёт исключений - я просто показал, как и когда их выбрасывать, то, что лучше выбрасывать объект стандартного класса (или его наследника) - это само собой.
На счёт константного оператора доступа - это да, оплошал, когда код копипастил - забыл добавить конст не только в конце, но и вначале
Yandex
Объявления
06.01.2011, 10:47     шаблоны
Ответ Создать тему
Опции темы

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