显示自定义模板化抽象数据类型的对象

时间:2014-11-30 03:20:05

标签: c++ class templates visual-c++ abstract-data-type

我正在开发一个抽象数据类型,它类似于赋值的映射STL。该简报说我应该提供一系列设施,包括输出抽象数据类型中包含的对象。我如何输出存储在ADT中的数组数据,我不能使用任何STL,因此我认为我不能使用迭代器,并且在ADT中使用cout的函数看起来很愚蠢。有什么建议?谢谢。代码如下:

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

keyData* datas;
keyData* ptr;

1 个答案:

答案 0 :(得分:0)

如果您采用让用户访问对象的方式,那么我将使用迭代器和operator[]。要定义迭代器,您只需定义beginend成员函数(最终const重载)。问题是你通常想要提供地图的键和值。 std::map解决此问题的方法是返回一些在语义上等同于std::pair<const Key, T>指针的类型,以便您可以通过std::get<0>(*it)访问密钥,使用std::get<1>(*it)访问该值。

如果要定义自定义&#34; print&#34;功能,您只需为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