gpt4 book ai didi

c++ - 如何使用结构数据类型删除 vector 中的特定元素

转载 作者:行者123 更新时间:2023-11-30 01:05:56 25 4
gpt4 key购买 nike

我是 C++ 新手。我的程序是一个问答游戏,用户可以为问题选择类别和级别。起初,我使用结构数据类型

struct QuestionInfo
{
string category;
string level;
string question;
string answer;
};

然后

vector<QuestionInfo> vec;

这部分的思路是将问题包含的信息(类别、级别、问题和答案)存储到每个元素中。然后在构建菜单和输出问题 UI 之后,我转到过滤器

void category_filter()
{
for (unsigned int i = 0; i < vec.size(); i ++)
{
if (category_choice != vec[i].category)
vec.erase(vec.begin() + i );
}
}
Void level_filter()
{
for (unsigned int i = 0; i < vec.size(); i ++)
{
if (level_choice != vec[i].level)
vec.erase(vec.begin() + i );
}
}

所以过滤器的思想是删除不包含匹配类别和级别的元素。但是输出的问题与我之前选择的类别和级别不匹配。我不确定我做错了什么。

最佳答案

让我用我的示例向您解释问题。假设您有一个包含 10 元素的 vector ,有效索引为 09 元素。您必须删除第 5 个元素 i == 4。您删除它,然后索引为 5 的第 6 个元素移动到索引为 4 的第 5 个元素的位置。之后你在 for 中增加 i,它变成 5。因此,您跳过了之前的第 6 个元素,现在是索引 4 的第 5 个元素。

您可以像下面那样修复您的代码,将 i++ 移动到条件中。

for (unsigned int i = 0; i < vec.size(); ) {
if (category_choice != vec[i].category)
vec.erase(vec.begin() + i );
else
i ++;
}

@Jonathan 演示了 C++ 方式中的首选解决方案。

关于c++ - 如何使用结构数据类型删除 vector 中的特定元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47719279/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com