在C++中搜索并删除矢量中的特定项目

Search and Delete a specific Item from a Vector in C++

本文关键字:项目 删除 C++ 搜索      更新时间:2023-10-16

我正在做一个程序,该程序具有具有以下属性的用户类:

private:
    char* username;
    char* firstname;
    char* lastname;
    ...

总的来说.cpp我有一个类 User 的向量:

#include <vector>
#include "User.h"
using std::vector;
void main (int argc, char* argv[])
{
    vector<User*> users;
    /*
        ... Some Code ...
    */
}

我在/* ... Some Code ... */的地方添加了一些用户。

但是现在我想从程序中做什么:

  • 添加用户
    • 搜索是否已添加用户(users[i]中的用户名 = 新用户中的用户名)
      • 不添加
      • return false; // Confirm not added
      • 添加用户
      • return true; // Confirm added

另一方面,我想通过用户名搜索用户并将其从向量中删除:

  • 删除用户
    • 搜索用户是否在列表中(users[i]中的用户名 = 要删除的用户名)
      • 删除用户 I
      • return true; // confirm deleted
      • return false; // confirm not deleted

我希望你明白我的意思。

使用 lambda

User newUser( name );
if ( std::find_if( user.begin(), users.end(), []( const User& u )->bool { strcmp( u.username, newUser.username ) == 0; } ) == users.end() )
{
    user.push_back( newUser );
}

(这是我的头顶,所以我可能犯了一个错误......

不要使用指针作为 stl 容器的有效负载。这不是推荐的方法。请改用可复制的类型。所以你会有这样的东西 - 矢量<用户>用户;

我认为您应该使用列表而不是矢量,因为除非您启用了移动语义,否则中间删除 vector 效率不高。