2014-11-30 4 views
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'? – Shoe

+0

@Jefffrey Я не уверен, что это нормально использовать cout в функции-члене STL – user3427689

+0

моего ADT. Я должен сказать, не знаю, должны ли ADT содержать такие внешние элементы – user3427689

ответ

0

Если вы идете по пути давая пользователю доступ к объектам, то я бы с итераторы и operator[]. Чтобы определить итераторы, вам просто нужно определить функцию-член begin и end (с возможными перегрузками 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.

Для получения дополнительного вдохновения вы можете взять look at the std::map interface.

+0

@Yakk True. Он возвращает что-то, что * семантически эквивалентно * паре 'Key' и' Value'. – Shoe

Смежные вопросы