如何从矢量中删除元素?

时间:2014-10-04 23:00:48

标签: c++ visual-c++ vector iterator

我正在开发一个基于控制台的简单电子邮件应用程序。

在我的应用中,邮件存储在std::vector中,我想添加删除邮件的可能性。

如何从矢量中删除元素?

这是我的代码:

//MAIN MENU OPTION 1 SELECTED:
// print list of all messages to the console
void viewInbox() {
    vector<Message> inbox{
        Message("jayleno@hotmail.com", "Knife you tonight", "Hey Sam, what kind of suit do you wanna be buried in?!"),
        Message("paypalservices@hotmail.com", "Urgent from paypal.com", "Dear paypal user, someone has hacked your account. Give us your password now so we change it!"),
    };

    cout << "You have " << inbox.size() << " new messages.\n";
    cout << "Index      Subject" << '\n';

    for (int i = 0; i < inbox.size(); ++i)
        std::cout << "Message " << i << ": " << inbox[i].getSubject() << '\n';

    cout << "Please enter number of message you would like to view\n";
    int read;
    cin  >> read;
    cout << "From: " << inbox[read].getAddress() << '\n';
    cout << "Subject: " << inbox[read].getSubject() << '\n';
    cout << inbox[read].getMessageText() << '\n';

    cout << "To erase this message press 1\n";
    //Code here for deleting a message...
}//end of viewInbox()

1 个答案:

答案 0 :(得分:1)

要从向量中删除消息,请使用带有迭代器的vector::erase

获取特定消息的迭代器的最简单方法是使用inbox.begin() + message_number

我已将您的代码重构为较小的函数,以使代码更易于使用:

  void viewMessage(vector<Message>& messages, size_t message_number) {
    vector<Message>::iterator message = messages.begin() + message_number;
    cout << "From: " << message->getAddress() << endl;
    cout << "Subject: " << message->getSubject() << endl;
    cout << message->getMessageText() << endl;

    cout << "To erase this message press 1\n";
    int erase;
    cin >> erase;
    // Maybe do some error checking on cin...
    if (erase == 1) {
      messages.erase(message);
    }
  }

  void viewMessages(vector<Message>& messages){
    auto inbox_size = messages.size();
    cout << "You have " << inbox_size << " new messages.\n";
    cout << "Index      Subject" << '\n';

    for (size_t i = 0u; i != inbox_size; ++i) {
      std::cout << "Message " << i << ": " << messages[i].getSubject() << '\n';
    }

    cout << "Please enter number of message you would like to view\n";
    size_t message_number;
    cin >> message_number;
    // Maybe do some error checking on cin...
    // And some bounds checking of message_number...
    viewMessage(messages, message_number);
  }

void viewInbox() {
  vector<Message> inbox{
    Message{ "jayleno@hotmail.com", "Knife you tonight", "Hey Sam, what kind of suit do you wanna be buried in?!" },
    Message{"paypalservices@hotmail.com", "Urgent from paypal.com", "Dear paypal user, someone has hacked your account. Give us your password now so we change it!"},
  };
  viewMessages(inbox);
  // Maybe call viewMessages again to see results of erase...
}

正如我所评论的那样,请注意输入错误检查。