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