2014-09-25 100 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