2015-11-21 36 views
-3

所以我的工作是描述函數,我正在研究void erase()函數,該函數應該在給定字符串名稱的情況下移除向量的元素。老師只給了我們一個電話簿任務的原型。他也給了我們一個建造main(),我們不允許改變他的main()或原型,只描述他們。 列出的第一個是原型,然後是我的工作,然後是主要的。如何從我的矢量中刪除具有用戶類參數的元素?

PROTOYPES

#ifndef PHONEBOOK_H 
    #define PHONEBOOK_H 
    #include <string> 
    #include <vector> 
    using namespace std; 

    class Person 
    { 
    public: 
     Person(); 
     Person(string new_name, int new_phone); 
     string get_name() const; 
     int get_phone() const; 
     bool operator < (Person p) const; 
     void print() const; 

    private: 
     string name; 
     int phone; 
    }; 

    void add_people(vector<Person> &phone_book); 
    void erase(vector<Person> &phone_book, string name); 
    void sort(vector<Person> &phone_book); 
    void shuffle(vector<Person> &phone_book); 
    void reverse(vector<Person> &phone_book); 
    void print(vector<Person> &phone_book); 
    int lookup(const vector<Person> &phone_book, string name); 
    #endif 

我的工作

 #include <iostream> 
     #include <string> 
     #include <vector> 
     #include <time.h> 
     #include "phonebook.h" 

     Person::Person() 
     { 
      name = "NONE"; 
      phone = 0000000; 

     } 
     Person::Person(string new_name, int new_phone) 
     { 
      name=new_name; 
      phone=new_phone; 
     } 
     string Person::get_name() const 
     { 
      return name; 
     } 
     int Person::get_phone() const 
     { 
      return phone; 
     } 
     bool Person::operator < (Person p) const 
     { 
      return name < p.name; 
     } 
     void Person::print() const 
     { 
      cout << endl << name << " " << phone; 
     } 

     void add_people(vector<Person> &phone_book) 
     { 
      cout << "Please enter the new name: "; 
      string s; 
      getline(cin, s); 
      cout << "Please enter new number: "; 
      int number; 
      cin >> number; 
      phone_book.push_back(Person(s,number)); 
     } 
     void erase(vector<Person> &phone_book, string name) 
     { 
     } 
     void sort(vector<Person> &phone_book) 
     { 
     } 
     void shuffle(vector<Person> &phone_book) 
     { 
     } 
     void reverse(vector<Person> &phone_book) 
     { 
     } 
     void print(vector<Person> &phone_book) 
     { 
      for(int i=0; i < phone_book.size(); i++) 
       cout << phone_book[i] << " "; 
     } 

     int lookup(const vector<Person> &phone_book, string name) 
     { 
       int i = 0; 
       while (i < phone_book.size() && phone_book[i].get_name() != name) 
       { 
        i++; 
        return phone_book[i].get_phone(); 
       } 
     } 

主要

#include <iostream> 
#include <string> 
#include <vector> 
#include <time.h> 
#include "phonebook.h" 

using namespace std; 




int main() 
{ 

    vector<Person> phone_book; 
    string name; 
    int number; 
    int answer; 

    srand((int)(time(0))); 

    phone_book.push_back(Person("Bruin, Joe", 5556456)); 
    phone_book.push_back(Person("Simpson, Homer", 5557471)); 
    phone_book.push_back(Person("Duffman, Barry", 5533331)); 


    cout <<"\n"; 
    cout << "Your phone book contains the following names and numbers: \n"; 

    for (int i=0; i < phone_book.size(); i++) 
    { 

     phone_book[i].print(); 
     cout << "\n"; 
    } 
    cout <<"\n"; 
    answer=0; 

    while (answer != 8) 
    { 
     cout << "\nChoose from the following options:\n\n"; 

     cout << "1) Add people to the phone book.\n"; 
     cout << "2) Erase a person from the phone book.\n"; 
     cout << "3) Sort the phone book.\n"; 
     cout << "4) Shuffle the phone book.\n"; 
     cout << "5) Reverse the phone book.\n"; 
     cout << "6) Print the phone book.\n"; 
     cout << "7) Look up a person in the phone book.\n"; 
     cout << "8) Quit.\n\n"; 

     cin >> answer; 

     string clear; 

     getline(cin, clear); 

     if (answer == 1) 
      add_people(phone_book); 
     else if (answer == 2) 
     { 
      cout << "Enter a name: "; 
      getline(cin, name); 
      erase(phone_book, name); 

     } 
     else if (answer == 3) 
      sort(phone_book); 
     else if (answer == 4) 
      shuffle (phone_book); 
     else if (answer == 5) 
      reverse(phone_book); 
     else if (answer == 6) 
     { 
      cout <<"\n"; 
      cout << "Your phone book contains the following names and numbers: \n"; 
      print(phone_book); 
     } 
     else if (answer ==7) 
     {     
      cout << "Enter a name: "; 
      getline(cin, name); 
      int number = lookup(phone_book, name); 
      if (number > 0) 
      { 
       cout << "\n\nThe number for " << name << " is: " << number << "\n\n"; 
      } 
      else 
       cout << name << " not found in the phone book.\n"; 
     } 
    } 
    return 0; 
} 
+1

請提供[mcve](http://stackoverflow.com/help/mcve)。 – YSC

+0

如果你們可以給我指向排序函數的指針,它應該按照它們各自的字符串參數按字典順序排列向量的元素 – BroBama

回答

0

你的查找功能找到與向量中的給定名稱的人的位置。你可以使用這個索引以及vector erase function從載體中移除Person。

順便說一句,在你的查找函數中,你可能也想考慮在沒有給定名字的Person的情況下會發生什麼。

相關問題