关于一个怎么使用泛型算法的有关问题
关于一个如何使用泛型算法的问题
问题是这样的,有两个容器A、B,需要从容器A中删除与容器B重复的元素,用泛型算法 std::remove_if 和 std::find_if 如何实现,求指点,可以以 std::vector<int> 为例。
------解决方案--------------------
this literally does what you have asked for.
but a faster solution would be
#include <algorithm>
#include <iostream>
#include <iterator>
#include <vector>
int main ()
{
std::vector<int> a {0,1,2,3,4,5,6,7,8,9};
std::vector<int> b{3,5,8};
std::cout << "before removal" << std::endl;
for (auto const a : a) { std::cout << a << " "; } std::cout << std::endl;
问题是这样的,有两个容器A、B,需要从容器A中删除与容器B重复的元素,用泛型算法 std::remove_if 和 std::find_if 如何实现,求指点,可以以 std::vector<int> 为例。
泛型算法
------解决方案--------------------
this literally does what you have asked for.
#include <algorithm>
#include <iostream>
#include <vector>
int main ()
{
std::vector<int> A {0,1,2,3,4,5,6,7,8,9};
std::vector<int>const B{3,5,8};
std::cout << "before removal" << std::endl;
for (auto const a : A) { std::cout << a << " "; } std::cout << std::endl;
for (auto const b : B) { std::cout << b << " "; } std::cout << std::endl;
A.erase(std::remove_if(A.begin(),A.end(),[&](int const a)
{
return B.end() != std::find(B.begin(),B.end(),a);
}),A.end());
std::cout << "after removal" << std::endl;
for (auto const a : A) { std::cout << a << " "; } std::cout << std::endl;
for (auto const b : B) { std::cout << b << " "; } std::cout << std::endl;
}
but a faster solution would be
#include <algorithm>
#include <iostream>
#include <iterator>
#include <vector>
int main ()
{
std::vector<int> a {0,1,2,3,4,5,6,7,8,9};
std::vector<int> b{3,5,8};
std::cout << "before removal" << std::endl;
for (auto const a : a) { std::cout << a << " "; } std::cout << std::endl;