Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/161.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在C+中搜索并删除向量中的特定项+;_C++_Vector - Fatal编程技术网

C++ 在C+中搜索并删除向量中的特定项+;

C++ 在C+中搜索并删除向量中的特定项+;,c++,vector,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*&g

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

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 ...
    */
}
#包括
#包括“User.h”
使用std::vector;
void main(int argc,char*argv[])
{
矢量用户;
/*
…一些代码。。。
*/
}
我在
/*中添加了一些用户。。。一些代码*/位置

但现在我想从一个程序中得到什么:

  • 添加用户
    • 搜索是否已添加用户(用户名在
      用户[i]
      =用户名在新用户中)
      • 不添加
      • 返回false;//确认未添加
    • 否则
      • 添加用户
      • 返回true;//确认已添加
另一方面,我希望通过用户名搜索用户,并将其从向量中删除:

  • 删除用户
    • 搜索用户是否在列表中(用户名在
      用户[i]
      =要删除的用户名)
      • 删除用户i
      • 返回true;//确认已删除
    • 否则
      • 返回false;//确认未删除
我希望你明白我的意思。

使用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容器的有效负载。 这不是推荐的方法。 而是使用可复制的类型。 所以你会有这样的东西-向量用户


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

这不是“搜索并删除”我理解,您希望我们做您的家庭作业。顺便说一下,您的代码中没有涉及Qt…映射可能比向量更好。你真的想要容器中的指针吗?我同意@awoodland的观点:你可能想要一个
映射
集合
,来完成这个任务。两者都比
向量
更直接地处理您的需求。事实上,你基本上使用了<代码>向量<代码>作为一种(相当低效)的方式来实现<代码> SET/COME。实际上,我想搜索如何在C列表中搜索一个类并做一些函数(例如,添加、删除)。我可以只做用户[i]。用户名,但是在C++向量中,我不能做同样的事,我必须首先使用用户。代替用户[i],我将无法选择我要检查的内容。我可以用同样的方法进行删除吗?user.pop_back(selectedUser);