不允许重复的函数?(C++)

A function where duplicates are not allowed? (C++)

本文关键字:C++ 函数 不允许      更新时间:2023-10-16

所以我假设修改一个函数,它的初始目的是使字符串的数组中不能有超过6个项。这是代码

template<class ItemType>
bool Bag<ItemType>::Add(const ItemType& new_entry)
{
  bool has_room_to_add = item_count_ < max_items_;
  if (has_room_to_add)
   {
      items_[item_count_] = new_entry;
      item_count_++;
   }  // end if
  return has_room_to_add;
}  // end add

这是我的尝试。

template<class ItemType>
bool set<ItemType>::Add(const ItemType& new_entry)
{
  string checker[] = { "Joker", "Ace", "Two", "Three",
      "Four", "Five", "Six", "Seven",
      "Eight", "Nine", "Ten", "Jack",
      "Queen", "King" };
  bool has_room_to_add = item_count_ < max_items_;
  //compares the new entry to every item in the string and if there is a duplicate, the loop breaks and nothing is added.
   if (has_room_to_add)
   {
         for ( int i =0; i <=13; i++)
        {
            if (checker[i] == items_[item_count_])
                break;  //ends loop
            else if (i==13)
            {
                items_[item_count_] = new_entry;
                break;  //ends loop
            }  // end if
        } // end for
   } //end if
// increases item_count_ if a new item is added to a set.
  if (items_[item_count_] == new_entry)
      item_count_++;
  return has_room_to_add;
}  // end add

但这不仅不能防止重复,还打破了不允许超过6个项目的初衷,如果有更多项目,就会失控。有人能告诉我我做错了什么吗?

实现这一点的C++方法是使用std::set,因为std::set不存储重复项。

#include <set>
#include <string>
#include <iostream>
#include <iterator>
#include <algorithm>
using namespace std;
int main()
{
   string checker[] = { "Joker", "Ace", "Two", "Three",
      "Four", "Five", "Six", "Seven",
      "Eight", "Nine", "Ten", "Jack",
      "Queen", "King",  "Joker", "Ace", "Two", "Three",
      "Four", "Five", "Six", "Seven",
      "Eight", "Nine", "Ten", "Jack",
      "Queen", "King" };
   set<string> mySet;
   // insert all of the items in the array into the set  
   copy(checker, checker + sizeof(checker)/sizeof(checker[0]), std::inserter(mySet, mySet.begin()));
   // output the results
   copy(mySet.begin(), mySet.end(), std::ostream_iterator<string>(cout, "n"));
}

输出:

Ace
Eight
Five
Four
Jack
Joker
King
Nine
Queen
Seven
Six

请注意,即使试图在集合中放置重复的条目,也只存在一个条目。将项目数量限制为6:

#include <set>
#include <string>
#include <iostream>
#include <iterator>
#include <algorithm>
using namespace std;
int main()
{
   string checker[] = { "Joker", "Ace", "Two", "Three",
      "Four", "Five", "Six", "Seven",
      "Eight", "Nine", "Ten", "Jack",
      "Queen", "King",  "Joker", "Ace", "Two", "Three",
      "Four", "Five", "Six", "Seven",
      "Eight", "Nine", "Ten", "Jack",
      "Queen", "King" };
   set<string> mySet;
   // insert all of the items in the array into the set  
   for (size_t i = 0; i < sizeof(checker)/sizeof(checker[0]); ++i)
   {
      if ( mySet.size() < 6 )
         mySet.insert(checker[i]);
      else
         break;
   }
   // output the results
   copy(mySet.begin(), mySet.end(), std::ostream_iterator<string>(cout, "n"));
}

输出:

Ace
Five
Four
Joker
Three
Two