【发布时间】:2013-01-20 03:37:44
【问题描述】:
我无法正确掌握这个想法和编程这样的事情(我是初学者): 我有一个向量。向量可以说元素:fieldA、fieldB、fieldC。因此,有了这些向量的数组,我想检查,从数组中的最后一个向量开始,然后转到第一个向量的方向,如果其中一个元素具有特定值,可以说 if (vect[i].字段A == 0.0)。在这种情况下,如果 (vect[i-1].fieldA == 0.0) so 具有相同的值,我想从数组中删除整个向量。有人可以为我提供一部分可视化的代码,如何创建正确的“反向迭代”循环并使用函数删除它?我正在尝试使用erase()、remove()、deque(),但我失败了。
我不想在这里弄乱我的代码。
感谢您的帮助!
编辑。所以我首先在我的数组中循环输入向量值,然后我想从最后删除所有包含元素特定值的向量,例如字段A == 0.0
我想切割数组,而不仅仅是删除向量的内容! classB 和 classA 之间存在适当的继承,因此馈送效果很好,我只想通过删除向量来解决这个问题。 示例:包含 2 个元素的向量数组。输入:0,1 0,3 3,3 2,3 0,6 5,6 0,8 0,7 0,6 输出:0,1 0,3 3,3 2,3 0,6 5,6 0 ,8。结论:0,7和0,6向量被删除。
classA tmp;
for (std::vector<std::classB>::iterator iter = newW.begin(); iter != newW.end(); iter++)
{
tmp.set_fieldA(iter->a);
tmp.set_fieldB(iter->b);
tmp.set_fieldC(iter->c);
objA.push_back(tmp);
}
vector<std::classA> objA;
for(int i = objA.size()-1; i > 0; i--)
{
if (objA[i].fieldA == 0.0)
if (objA[i-1].fieldA == 0.0)
objA.erase(objA[i-1]); //remove last vector from array
}
【问题讨论】:
-
很难从问题中准确理解发生了什么。如果您到目前为止向我们展示您的代码,那么有人可能会告诉您如何修复它。
-
另外,如果你从数组中删除一个向量,这意味着你有一个二维数组,比如向量的向量?
-
@makciook 我认为这个上下文中的向量实际上是一个
class和成员fieldA等,这些被存储在一个数组中(或者可能是std::vector)?这就是我要代码的原因;不是很清楚。 -
对不起,我现在提供了我写的代码
-
乍一看,我发现的一个错误是您在应该填充它的循环之后声明了您的
std::vector<std::classA> objA。您应该将声明移到第一个循环上方。
标签: c++ algorithm vector iteration erase-remove-idiom