在C++中搜索并删除矢量中的特定项目
Search and Delete a specific Item from a Vector in C++
我正在做一个程序,该程序具有具有以下属性的用户类:
private:
char* username;
char* firstname;
char* lastname;
...
总的来说.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
-
- 搜索用户是否在列表中(
我希望你明白我的意思。
使用 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 容器的有效负载。这不是推荐的方法。请改用可复制的类型。所以你会有这样的东西 - 矢量<用户>用户;用户>
我认为您应该使用列表而不是矢量,因为除非您启用了移动语义,否则从中间删除 vector 效率不高。
相关文章:
- 从链接列表c++中删除一个项目
- 你能检查一下为什么在这个代码中从链接列表中删除项目不起作用吗
- 如何自动获取我的项目的路径并删除一些文件
- 如何从 CLion 的运行窗口中删除程序项目路径
- 类(可能是代理)的命名,允许在不修改基础容器的情况下对项目进行排序和删除
- C++ 从链表中删除项目时出现问题
- 仅从无序集合中删除一个项目
- Visual studio安装项目删除以前的版本
- 如何使用擦除和迭代器来删除二维向量中的项目
- 从 std::vector 中删除项目时"Iterator not incrementable"
- C++ priority_queue与自定义比较器并删除任何项目
- 从 QTreeView 中删除项目时取消选择所有行
- 如果为空,则从 QListWidget 中删除可编辑项目
- 从传递给新线程C++的矢量中删除项目
- C++ 链表删除了错误的项目
- 删除并清除组合框 Win32 API 中的所有项目
- 删除 iOS 项目中的 SDLKey 引用
- 如何将项目属性设置为删除警告MSB8004:中间目录不会以落后的斜线结束
- 如何创建一个函数,该函数可以从一个qtreewidget中删除项目并将其添加到另一个函数
- 在拖放 QML 列表中插入/删除项目使用 cpp 模型查看