-1

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

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 ... */地方添加了一些用户。

但是现在我想从程序中做的事情:

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

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

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

我希望你明白我的意思。

4

2 回答 2

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

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

于 2012-05-27T00:32:02.860 回答
0

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

我认为你应该使用列表而不是向量,因为向量在从中间删除时效率不高,除非你启用了移动语义。

于 2012-05-27T06:07:50.703 回答