2014-09-25 4 views
0

Так что я могу изменить функцию, чья первоначальная цель состоит в том, что строка не может содержать более 6 элементов в своем массиве. Heres кодФункция, в которой дубликаты не допускаются? (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

Используйте 'зЬй :: set' и ограничить количество записей до 6. Кроме того, это не очень хорошая идея назовите свой класс 'set'. – PaulMcKenzie

+0

Можете ли вы показать остальную часть класса «Сумка» и установить? –

ответ

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