2014-09-25 163 views
0

因此,我想修改一个函数,其初始目的是使一个字符串的数组中不能有多于6个项目。下面是代码不允许重复的功能? (C++)

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个项目的原始目的,并且如果有更多的话会失灵。谁能告诉我我做错了什么?

+1

使用'的std :: set'并限制条目6的数量也并不是一个好主意命名你的班级'set'。 – PaulMcKenzie 2014-09-25 22:18:24

+0

你可以显示其余的课程包和设置吗? – 2014-09-25 22:22:23

回答

1

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