如何使用以集合为参数的模板化客户端display()函数

How to use a templated client display() function that takes a set as the parameter

本文关键字:客户端 display 函数 何使用 集合 参数      更新时间:2023-10-16

我必须编写一个名为DisplaySet()的模板化客户端函数,该函数获取一个集作为参数,并显示该集的内容。我对如何在客户端函数中输出作为类的一部分的集合感到困惑。这是我的代码:

"set.h"

template<class ItemType>
class Set
{
 public:
  Set();
  Set(const ItemType &an_item);
  int GetCurrentSize() const;
  bool IsEmpty() const;
  bool Add(const ItemType& new_entry);
  bool Remove(const ItemType& an_entry);
  void Clear();
  bool Contains(const ItemType& an_ntry) const; 
  vector<ItemType> ToVector() const;
  void TestSetImplementation() const;
 private:
  static const int kDefaultSetSize_ = 6;
  ItemType items_[kDefaultSetSize_]; 
  int item_count_;                    
  int max_items_;                 
  int GetIndexOf(const ItemType& target) const;
};
template<class ItemType>
void DisplaySet(const Set<ItemType> &a_set);

"set.cpp"

template<class ItemType>
void DisplaySet(const Set<ItemType> &a_set){
    int a_size = a_set.GetCurrentSize(); //gets size of the set
    cout <<"Size display "<< a_size << endl;
    for (int i = 0; i < a_size; i++) {
        cout << a_set[i] << endl; //i know this does not work because a_set is part of a class
    }
}

"main.cpp"

#include <iostream>
#include <vector>
#include <string>   
#include "Set.h"   
using namespace std;
int main()
{
   Set<int> b_set;
   b_set.Add(setArray[1]);
   b_set.Add(setArray[2]);
   b_set.Add(setArray[4]);
   b_set.Add(setArray[8]);
   DisplaySet(b_set);
   return 0;
}

我希望有人能解释一下如何使用这个函数。如果我需要发布更多的代码

,请告诉我

您的Set类没有重载的operator[],因此在DisplaySet函数中调用a_set[i]将不起作用。

假设您的ToVector函数返回集合中项目的向量,DisplayFuntion可以如下所示:

#include <iterator>
#include <algorithm>
#include <iostream>
//...
template<class ItemType>
void DisplaySet(const Set<ItemType> &a_set)
{
    std::vector<ItemType> v = a_set.ToVector();
    std::copy(v.begin(), v.end(), std::ostream_iterator<ItemType>(cout, "n"));
}

同样,这是假设ToVector如所述那样。