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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Fater
0 / 0 / 0
Регистрация: 18.09.2009
Сообщений: 25
#1

шаблоны - C++

04.01.2011, 23:07. Просмотров 528. Ответов 9
Метки нет (Все метки)

помогите с задачей пожалуйста
нужно описать шаблон класса для хранения последовательности пар ключ - значение, написать функцию
возвращающую по заданному ключу индекс этого значения, а также операцию доступа по индексу и функцию возвращающую кол-во хранимых пар, генерировать исключение если соответствующий ключ не найден и если индекс выходит за диапазон.
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.01.2011, 23:07
Здравствуйте! Я подобрал для вас темы с ответами на вопрос шаблоны (C++):

«Шаблоны шаблонов» vs «шаблоны с параметрами-шаблонами». - C++
«Шаблоны шаблонов» vs «шаблоны с параметрами-шаблонами». Есть ли разница в этих понятиях? Если есть, то в чём? И где (в каких...

Шаблоны. Плохо понимаемые моменты из книги "Шаблоны С++. Справочник разработчика". (Вандевурд, Джосаттис) - C++
Так как изучаю эту книгу, то в некоторых местах возникают вопросы. Чтобы не плодить много тем, корни у которых одни, решил создать эту...

Помогите писать на С++ через шаблоны. Консуле я писал, но надо писать исползуя шаблоны - C++
В одномерном массиве, состоящем из п вещественных элементов, вычислить: 1) количество элементов массива, равных 0; 2) сумму элементов...

Шаблоны - C++
Пусть есть шаблон-структура. template <class Data> struct A { Data p; }; И есть указатели на объекты: A<int> *b; ...

Шаблоны - C++
Здравствуйте. Читая про шаблоны в Википедии (https://ru.wikipedia.org/wiki/%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD%D1%8B_C%2B%2B) ...

Шаблоны - C++
Выполнить задание без использования библиотеки стандартных шаблонов. а) Создать шаблонную функцию поиска по заданному ключу. Функция...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
silent_1991
Эксперт С++
4964 / 3040 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
04.01.2011, 23:20 #2
Поможем.
Что не получается?
0
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);
0
silent_1991
Эксперт С++
4964 / 3040 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
04.01.2011, 23:38 #4
Да, в этом куске вроде всё так. Так в чём всё-таки вопрос? У вас вроде у самого неплохо получается.
0
Fater
0 / 0 / 0
Регистрация: 18.09.2009
Сообщений: 25
04.01.2011, 23:40  [ТС] #5
как можно реализовать операцию доступа по индексу?
да и еще где объявить KeyError чтобы в нем использовать тип К?
0
silent_1991
Эксперт С++
4964 / 3040 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 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 использовать.
0
Fater
0 / 0 / 0
Регистрация: 18.09.2009
Сообщений: 25
05.01.2011, 00:03  [ТС] #7
там же операция доступа по индексу, т.е. нужно перегрузить оператор []
0
silent_1991
Эксперт С++
4964 / 3040 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 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];
}
1
Nick Alte
Эксперт С++
1637 / 1009 / 119
Регистрация: 27.09.2009
Сообщений: 1,945
Завершенные тесты: 1
05.01.2011, 12:31 #9
Внесу маленькую поправочку. Во-первых, выбрасывать лучше не самопальный IndexError, а std::range_error. Во-вторых, константный оператор доступа должен и возвращать не просто K&, а const K&
1
silent_1991
Эксперт С++
4964 / 3040 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
06.01.2011, 10:47 #10
Nick Alte, на счёт исключений - я просто показал, как и когда их выбрасывать, то, что лучше выбрасывать объект стандартного класса (или его наследника) - это само собой.
На счёт константного оператора доступа - это да, оплошал, когда код копипастил - забыл добавить конст не только в конце, но и вначале
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.01.2011, 10:47
Привет! Вот еще темы с ответами:

Шаблоны - C++
Так делать типо нельзя ? template&lt;class T, int maxPrint = 10&gt; void PrintAll(std::vector&lt;T&gt;&amp; forPrint) { ...

Шаблоны С++ - C++
template &lt;typename T_sizeCapacity&gt; class SomeClass { public: T_sizeCacity size; }; Как сделать чтобы T_sizeCapacity мог быть...

Шаблоны C++11 - C++
#include &lt;iostream&gt; template&lt;typename T1, typename T2&gt; auto func(T1 a, T2 b) -&gt; decltype(a&gt;b?b:a) { return a&gt;b?b:a; ...

Шаблоны - C++
Не пойму что я неправильно делаю. Как не переделывал, всё равно не получалось. Может кто сможет чем помочь. А задача следующая-надо было...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
06.01.2011, 10:47
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru