Отображение объектов пользовательского шаблонного абстрактного типа данных

0

Я разрабатываю абстрактный тип данных, который похож на карту STL для назначения. В брифинге говорится, что я должен предоставить ряд возможностей, включая вывод объектов, содержащихся в абстрактном типе данных. Как я могу сделать вывод данных массива, хранящихся в ADT, я не могу использовать какой-либо STL, поэтому я предполагаю, что не могу использовать итераторы, а функция, использующая cout в ADT, кажется глупой. Какие-либо предложения? Благодарю. Код ниже:

template <typename K, typename D>
class Map
{
private:
int mapSize;
int dataFilled;
struct keyData
{
    K key;
    D data;
};

keyData* datas;
keyData* ptr;
  • 0
    Что вы имеете в виду, что вы не можете использовать стандартную библиотеку? Любой из этого? Как насчет std::cout или std::ostream ?
  • 0
    @Jefffrey Я не уверен, нормально ли использовать cout в функции-члене STL
Показать ещё 6 комментариев
Теги:
class
templates
visual-c++
abstract-data-type

1 ответ

0

Если вы пойдете, чтобы позволить пользователю получить доступ к объектам, я бы пошел с итераторами и operator[]. Чтобы определить итераторы, вам просто нужно определить функцию begin и end member (с возможными перегрузками const). Проблема в том, что вы обычно хотите предлагать как ключи, так и значения карты. Путь std::map решает это, возвращая некоторый тип, который семантически эквивалентен указателю на std::pair<const Key, T> чтобы вы могли получить доступ к ключу через std::get<0>(*it) и значение std::get<1>(*it).

Если вы хотите определить пользовательскую функцию "печать", вы можете просто определить operator<< для std::ostream:

template<class Key, class Value>
std::ostream& operator<<(std::ostream& os, const Map<Key, Value>&) { ... }

Таким образом, вы сможете использовать:

Map<Key, Value> map;
std::cout << map;

Я бы рекомендовал предоставить аналогичным образом также operator>> для std::istream.

Для большего вдохновения вы можете взглянуть на интерфейс std::map.

  • 0
    @ Якк Правда. Он возвращает то, что семантически эквивалентно паре Key и Value .

Ещё вопросы

Сообщество Overcoder
Наверх
Меню