-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 ... */

しかし今、私がプログラムにやりたいこと:

  • ユーザーを追加
    • ユーザーが既に追加されているかどうかを検索します (username in users[i]= 新しいユーザーのユーザー名)
      • 追加しないでください
      • return false; // Confirm not added
    • そうしないと
      • ユーザーを追加する
      • return true; // Confirm added

一方、ユーザー名でユーザーを検索し、ベクターから削除したい:

  • ユーザーを削除する
    • ユーザーがリストにあるかどうかを検索します (username in users[i]= 削除するユーザー名)
      • ユーザー i を削除
      • return true; // confirm deleted
    • そうしないと
      • return false; // confirm not deleted

私の言いたいことを理解していただければ幸いです。

4

2 に答える 2

1

ラムダを使用する

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 に答える