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

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

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

шаблоны - C++

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

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

Шаблоны в C++ - C++
Здравствуйте! Написал такой код: #include <QtCore/QCoreApplication> #include <iostream> #include <string> using namespace...

Шаблоны и т.д.( - C++
Создать 2 шаблонные классы с конструктором инициализации и конструктором копирования. Создать третий класс, наследующий свойства из двух...

шаблоны - C++
Помогите пож. разобраться с шаблонами. Шаблоны у которых параметры тоже шаблоны. из книги: tamplate<typenamy T>class Thing здесь...

Шаблоны - C++
ругается на строку "friend class List<T>;", вот что пишет: 1>c:\users\slava\documents\visual studio...

Шаблоны - C++
Не могу понять в чем косяк. Компилятор ругается на перегрузке оператора ввода // Lab1-var3.cpp : Defines the entry point for the...

Шаблоны - C++
Я разбираюсь с ООП в С++ и застрял на шаблонах, будьте добры приведите пример кода, к примеру там.... вес машины и шаблон,(ну вообщем на...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
silent_1991
Эксперт С++
4961 / 3037 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 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
Эксперт С++
4961 / 3037 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
04.01.2011, 23:38     шаблоны #4
Да, в этом куске вроде всё так. Так в чём всё-таки вопрос? У вас вроде у самого неплохо получается.
Fater
0 / 0 / 0
Регистрация: 18.09.2009
Сообщений: 25
04.01.2011, 23:40  [ТС]     шаблоны #5
как можно реализовать операцию доступа по индексу?
да и еще где объявить KeyError чтобы в нем использовать тип К?
silent_1991
Эксперт С++
4961 / 3037 / 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 использовать.
Fater
0 / 0 / 0
Регистрация: 18.09.2009
Сообщений: 25
05.01.2011, 00:03  [ТС]     шаблоны #7
там же операция доступа по индексу, т.е. нужно перегрузить оператор []
silent_1991
Эксперт С++
4961 / 3037 / 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];
}
Nick Alte
Эксперт С++
1628 / 1000 / 118
Регистрация: 27.09.2009
Сообщений: 1,931
Завершенные тесты: 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++
template &lt;typename Type&gt; bool Func(Type &amp;data) { } Как сделать, что бы шаблон работал только для некоторых типов? Скажем...

Шаблоны - C++
Добрый день. Не могли бы объяснить вот этот вопрос: Допускают ли шаблоны вложенность описания?

Шаблоны - C++
Здравствуйте не объясните новичку пару аспектов про шаблоны 1)Зачем они нужны 2)Преимущества 3)Синтаксис 4)Маленький примерчик

Шаблоны С++ - C++
Есть функция Merge из алгоритма сортировки слиянием, она объединяет два массива A и B, результат записывает в массив C: template&lt;class T&gt;...


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

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

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