Разработка шаблонного класса-контейнера

Разработка шаблонного класса-контейнера

Помогите пожалуйста разобраться! решаю задачу и не могу найти солюшен, всё очень просто, вот задача:

Необходимо разработать класс контейнера, реализующий приведенный ниже интерфейс. При разработке приветствуется использование STL.

class ElemNotFound {};

template < class ElemType, class IndexType > class IContainer
{
public:
    virtual const ElemType& GetElem(const IndexType& index) const throw (ElemNotFound) = 0;
    virtual void PutElem(const IndexType& index, const ElemType& elem) throw () = 0;
};

Решение надо представить под Windows.

Я сделал эскиз, но он не компилируется студией ни в какую, и я в принципе в нем не до конца уверен, что надо изменить, что улучшить??

#include "stdafx.h"
#include <string>
#include <iostream>

//class ElemNotFound {};

template <class ElemType, class IndexType> class IContainer
{
private:
    ElemType arr[IndexType];
public:
    IContainer() {};
    IContainer(const ElemType & elem, const IndexType & index);
    virtual const ElemType& GetElem(const IndexType& index) /*const throw ( ElemNotFound ) = 0*/;
    virtual void PutElem(const IndexType& index, const ElemType& elem) /*throw () = 0*/; //первый это номер элемента в массиве, второй сам элемент
};

template<class ElemType, class IndexType = int>
IContainer<ElemType, IndexType>::IContainer(const ElemType & elem, const IndexType & index)
{
    for (int i = 0; i<index; i++)
        arr[i] = elem;
}

template<class ElemType, class IndexType>
void IContainer<ElemType, IndexType>::PutElem(const IndexType& index, const ElemType& elem)
{
    arr[index] = elem;
}

template<class ElemType, class IndexType>
const ElemType& IContainer<ElemType, IndexType>::GetElem(const IndexType & index)
{
    return arr[index];
}

int main()
{
    IContainer<double, int> ob(5, 7);
    IContainer<std::string, int> blablabla("google", 6);
    blablabla.PutElem(4, "duck");
    //std::cout<<blablabla.GetElem(3);
    return 0;
}

все стало компилироваться, я не могу разобраться что они хотят видеть во втором параметре, зачем он нужен вот здесь

template <class ElemType, class IndexType> class IContainer
{
private:
ElemType arr [12];

и как сделать так чтобы я создавал массивы нужных мне размеров а не заданных изначально.

TheNewGuy, пожалуйста оформляйте код аккуратно. Когда в коде более 3 строк, отсутствие отступов и отбивок пустыми строками смысловых блоков сильно затрудняет прочтение программы.

При написании сообщения код лучше оформлять вручную с помощью обратных апострофов. Пример оформления кода вручную см. над текстовым полем ввода сообщения.

С уважением, Модератор.

TheNewGuy, откуда у тебя во втором посте появилась эта строчка?

ElemType arr [12];

В первом посте такой строки нет.

Если задаешь вопросы, ты хоть последовательным будь :(

Если код из задания «перевести» на общеупотребительный язык, то требуется следующее:

Разработать шаблонный класс-контейнер с произвольным типом элементов и произвольным типом ключей. Класс должен иметь метод доступа к элементу контейнера по ключу (метод может возбуждать исключение ElemNotFound), и метод вставки элемента в контейнер с назначением ему ключа (метод не возбуждает исключений).

Исходя из принципа утиной типизации, я бы сказал, что в задании предлагается разработать ассоциативный массив.

В формулировке задания есть одна тонкость. Метод вставки элемента не должен возбуждать исключений. Поэтому надо решить что делать, если при вставке элемента в контейнере уже существует элемент с таким же ключом.

Внимание! Это довольно старый топик, посты в него не попадут в новые, и их никто не увидит. Пишите пост, если хотите просто дополнить топик, а чтобы задать новый вопрос — начните новый.

Ответить

Вы можете использовать разметку markdown для оформления комментариев и постов. Используйте функцию предпросмотра для проверки корректности разметки.

Пожалуйста, оформляйте исходный код в соответствии с правилами разметки. Для того, чтобы вставить код в комментарий, скопируйте его в текстовое поле ниже, после чего выделите то, что скопировали и нажмите кнопку «код» в панели инструментов. Иначе ваш код может принять нечитаемый вид.

Либо производите оформление кода вручную, следующим образом:

``` #include <iostream> using namespace std; int main() { // ... } ```

Предпросмотр сообщения

Ваше сообщение пусто.