C++ 从电子邮件 vector 中删除

标签 c++ email vector

我已将电子邮件从文本文件加载到 vector 中,我想让用户输入发件人的电子邮件并在 vector 中找到它并删除该对象, 但由于某种原因,我收到了一个错误。

这是函数

void deleteEmail(vector<Email> emailVector)
{
string junk;
getline(cin, junk);
cout << "Enter an email you want to delete" << endl;
string email_to_delete;
getline(cin, email_to_delete);
auto it = std::find(emailVector.begin(), emailVector.end(), email_to_delete);
if (it != emailVector.end())
    emailVector.erase(it);
for (Email e : emailVector)
    e.printEmail();
}

错误

Severity    Code    Description Project File    Line    Suppression State
Error   C2678   binary '==': no operator found which takes a left-hand operand of type 'Email' (or there is no acceptable conversion)   ProjectAlpha    c:\program files (x86)\microsoft visual studio 14.0\vc\include\xutility 3258    

这是电子邮件类中的数据类型

class Email
{
private:
    string sender;
    string recipient;
    string time;
    string subject;
    string body;
    Attachment attachment;

最佳答案

您需要通过您的 vector通过引用,而不是通过值。否则,您操作的是原始 vector 的拷贝,而不是原始 vector 。

至于您的特定错误,您不能使用 std::find()找到一个 std::stringEmail 的 vector 中对象,作为你的 Email类没有 operator==接受 std::string作为输入。您可以使用 std::find_if()用谓词代替,例如:

void deleteEmail(vector<Email> &emailVector)
{
    cout << "Enter the sender email address you want to delete:" << endl;
    string email_to_delete;
    getline(cin, email_to_delete);
    auto it = std::find_if(emailVector.begin(), emailVector.end(),
        [](const Email &email) {
            // Email::sender is private, so you need
            // to provide public access to it...
            return (email.getSender() == email_to_delete);
        }
    );
    if (it != emailVector.end())
        emailVector.erase(it);
    for (Email &e : emailVector)
        e.printEmail();
}

如果你想从同一个sender 中删除所有 封邮件, 你可以使用 std::remove_if()相反,例如:

void deleteAllEmail(vector<Email> &emailVector)
{
    cout << "Enter the sender email address you want to delete:" << endl;
    string email_to_delete;
    getline(cin, email_to_delete);
    auto it = std::remove_if(emailVector.begin(), emailVector.end(),
        [](const Email &email) {
            // Email::sender is private, so you need
            // to provide public access to it...
            return (email.getSender() == email_to_delete);
        }
    );
    emailVector.erase(it, emailVector.end());
    for (Email &e : emailVector)
        e.printEmail();
}

关于C++ 从电子邮件 vector 中删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41233880/

相关文章:

c++ - C++ 类及其成员函数的名称修改?

php - 为什么 php 的 mail() 函数发送邮件成功但字段为空?

ios - 我可以防止 iOS 关闭电子邮件撰写窗口,丢失用户数据吗

c++ - 将在堆栈上声明的元素添加到静态数组

c++ - vector 的 vector 如何工作?

c++ - 从 vector C++ 返回结构元素

c++ - 使用函数指针在函数实现之间切换

C++ 将变量添加到 vector 列表时出现问题

c++ - 用新的返回对齐的内存?

email - 阻止 Gmail 创建 URL 和电子邮件地址的链接