【发布时间】:2017-01-17 20:14:18
【问题描述】:
我在第一个和第二个位置都有整数向量对,并且输入相当具体。
首先,我有 i 个输入,它们都进入向量的第一个点,但之后是第二个输入数组,应该进入第二个位置。
但是,我想做的是,我有一个条件,如果我发现第二个点的输入大于某个值(mana,在我的情况下是变量),我只想不放它进入向量对,并从第一个位置删除该索引上的第一个元素,我无法弄清楚如何对其进行编码。
这是该代码的一部分:
vector<pair<int, int>>spellOne;
for (int i = 0; i < nSpellOne; i++)
{
scanf_s("%d", &input);
spellOne.back().first = input;
}
for (int i = 0; i < nSpellOne; i++)
{
scanf_s("%d", &input);
if (input > mana)
{
// removing the element on .first position at i index
}
else
{
spellOne.at(i).second = input;
}
}
任何人都可以帮助我如何做到这一点,如果这甚至可能,或者我应该切换到不同类型的数组? 我也考虑过使用地图,但这是不可能的,因为我很有可能在向量的第一个/第二个位置两次获得相同的值,因此我不能将它们中的任何一个用作键。
【问题讨论】:
-
您需要删除索引
i处的整对,然后将i也减少1(注意不要给i提供负值) -
我尝试使用向量的擦除函数来执行此操作,但我得到一个错误,因为我需要指定第一个或第二个位置,并且当我构建程序来擦除 spellOne.erase(spellOne. begin() + i),程序崩溃,说向量迭代器偏移超出范围。
-
是的,这是有道理的 Sara,请查看我作为答案发布的示例,应该足以让您得到提升! ;)