gpt4 book ai didi

c++ - 从 vector 中删除元素,如果它们也在另一个 vector 中

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:54:07 27 4
gpt4 key购买 nike

假设我有一个 vector a = {"the", "of"} 和一个 vector b = {"oranges", "the", "of", "apples ".

我想比较两个 vector 并从 a 中删除也在 b 中的元素。这是我想出的:

for (int i = 0; i < a.size(); i++) {
for (int j =0; j < b.size(); j++) {
if (a[i] == b[j]) {
a.erase(a.begin() + i);
}
}
}

但是这个循环并没有删除 a 中的最后一个元素。奇怪!

最佳答案

问题是,当您删除 a 的第一个元素时,索引会从 0 递增到 1。在循环的下一次迭代中, vector 的大小为 1 满足外层循环的条件导致它终止。您可以通过简单地使用 std::remove_ifstd::find 和 lambda 来避免解决此问题可能需要的任何技巧。

#include <iostream>
#include <algorithm>
#include <vector>
#include <string>

int main()
{
std::vector<std::string> a{ "the", "of" };
std::vector<std::string> b{ "oranges", "the", "of", "apples" };

auto pred = [&b](const std::string& key) ->bool
{
return std::find(b.begin(), b.end(), key) != b.end();
};

a.erase(std::remove_if(a.begin(), a.end(), pred), a.end());

std::cout << a.size() << "\n";
}

更好的测试是交换ab 的内容。这将删除“the”和“of”,留下“oranges”和“apples”。

关于c++ - 从 vector 中删除元素,如果它们也在另一个 vector 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27218178/

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