在C ++中从Vector中搜索并删除特定项

时间:2012-05-27 00:21:32

标签: c++ vector

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

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

在main.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

我希望你明白我的意思。

2 个答案:

答案 0 :(得分:1)

使用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 );
}

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

答案 1 :(得分:0)

不要将指针用作stl容器的有效负载。 这不是推荐的方式。 而是使用可复制的类型。 所以你会有这样的东西 - vector&lt; User&gt;用户;

我认为您应该使用 list 而不是 vector ,因为除了移动之外,从中间删除 vector 效率不高语义已启用。