c++ - 如何根据STL中类的参数找到指向类的指针?
问题描述
我正在创建一个项目,我在其中将指向对象的指针存储在向量(STL)中。我想根据 class 的特定参数执行操作。但是如何使用它我没有得到???
void BankingSystem :: Account_info()
{
// Account * mAccount = vobject.back();
long int ACC_NUMBER;
cout << "Enter AccountNumber : " <<endl;
cin >> ACC_NUMBER;
Account * mAccount = std::find(vobject.begin(),vobject.end(),ACC_NUMBER); //finding based on Account number u can use any parameter
cout << mAccount->Acc_holder.firstName << endl;
cout << mAccount->Acc_holder.aadharNo <<endl;
delete mAccount;
}
解决方案
std::find
(and std::find_if
) 返回一个迭代器到找到的元素(或者vobject.end()
如果它没有找到)。
你可以这样改变它:
void BankingSystem :: Account_info()
{
long int ACC_NUMBER;
cout << "Enter AccountNumber : " <<endl;
cin >> ACC_NUMBER;
auto mAccount = std::find_if(vobject.begin(), vobject.end(),
[&ACC_NUMBER](const Account* a) {
// acc_number is maybe called something else in
// your Account class.
return a->acc_number == ACC_NUMBER;
});
// check that you actually found something before printing and erasing:
if(mAccount != vobject.end()) {
auto AccountPtr = *mAccount;
cout << AccountPtr->Acc_holder.firstName << endl;
cout << AccountPtr->Acc_holder.aadharNo <<endl;
vobject.erase(mAccount); // not "delete mAccount;"
delete AccountPtr; // if it's actually is supposed to be deleted
}
}
但是,您很可能应该存储Account
而不是存储Account*
在您的vector
.
推荐阅读
- ruby-on-rails - 编码 iso-8859-1 不适用于 rails 5
- c# - 如何在执行共同任务时等待多个线程?
- python-3.x - SQLAlchemy 表达式语言和 SQLite 的删除级联
- javascript - 这里声明了什么?申报后的样子如何?
- hashicorp-vault - Hashicorp 保险库 - “个人保险库”政策问题
- python - Python - 字符串中的每个其他字母在循环中大写,其中数据是从用户输入的复制列表中传递下来的
- process - ubuntu中多个进程之间通信的最佳方式是什么
- python - 如何删除我的数据集中的垃圾值或缺失值?
- node.js - Node.js 和 Express - BadRequestError:请求中止
- wordpress - 使用 Docker 文件错误将文件从主机复制到 Docker 容器