gpt4 book ai didi

c++ - 删除 C++ vector 中的字段

转载 作者:搜寻专家 更新时间:2023-10-31 00:40:28 25 4
gpt4 key购买 nike

我无法正确理解这个想法和编程这样的东西(我是初学者):我有一个 vector 。 Vector 可以说元素:fieldA、fieldB、fieldC。所以有了这些 vector 的数组,我想检查,从数组中的最后一个 vector 开始,然后转到第一个 vector 的方向,如果其中一个元素具有特定值,假设 if (vect[i].字段 A == 0.0)。在这种情况下,如果 (vect[i-1].fieldA == 0.0) 具有相同的值,我想从数组中删除整个 vector 。有人可以为我提供一部分可视化的代码,如何创建正确的“反向迭代”循环并使用函数删除它吗?我尝试使用 erase()、remove()、deque() 但我失败了。

我不想在这里弄乱我的代码。

感谢您的帮助!

编辑。所以我首先用 vector 值循环我的数组,然后我想从最后删除所有包含元素特定值的 vector ,例如字段A == 0.0

我想切割数组,不仅要删除 vector 的内容!classB 和 classA 之间有适当的继承,所以馈送效果很好,我只想通过删除 vector 来解决这个问题。示例:包含 2 个元素的 vector 数组。输入: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 vector 。

    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
}

最佳答案

我按如下方式解释您的代码。你有一个名为 Vector 的 struct,它有 3 个成员

struct Vector
{
double fieldA;
double fieldB;
double fieldC;
}

下面的代码工作如下。它使用 std::find_if_not反向迭代器(rbegin()rend())来找到第一个后面的元素具有不同于 0fieldA。然后将其转换为常规迭代器(使用 base())并将其与 vector 的末尾进行比较。最后调用 v.erase 将实际删除它们(所谓的 erase-remove 习语)

#include <algorithm>
#include <vector>
#include <iostream>
#include <iterator>

int main()
{

struct Vector { int fieldA; int fieldB; };
std::vector<Vector> v = {
Vector{ 1, 0 }, Vector{ 2, 1 }, Vector{ 0, 2 }, Vector{ 1, 3 }, Vector{ 0, 4 },
Vector{ 0, 5 }, Vector{ 5, 6 }, Vector{ 6, 7 }, Vector{ 0, 8 }, Vector{ 0, 9 }, Vector{ 0, 10}
};

for (auto& e: v) { std::cout << "{" << e.fieldA << "," << e.fieldB << "}, "; };
std::cout << "\n";

auto m = std::find_if_not(v.rbegin(), v.rend(), [&](Vector const& elem){
return elem.fieldA == 0;
}).base();

if (m != v.end())
// remove all but one matching element
v.erase(m + 1, v.end());

for (auto& e: v) { std::cout << "{" << e.fieldA << "," << e.fieldB << "}, "; };
std::cout << "\n";
}

LiveWorkSpace 上输出

关于c++ - 删除 C++ vector 中的字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14703658/

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