C++ STL移除型算法 复制时一并移除元素remove_copy、remove_copy_if

C++ STL移除型算法 复制时一并移除元素remove_copy、remove_copy_if_第1张图片

将[First, Last]区间中的元素复制到_Dest为起点的目标区,同时将其中与_oldval相等的所有元素移除

C++ STL移除型算法 复制时一并移除元素remove_copy、remove_copy_if_第2张图片

将[First, Last]区间中的元素复制到_Dest为起点的目标区,同时将其中造成_Pred(elem)结果为true的所有元素移除

都返回目标区间中最后一个被复制元素的下一位置

复杂度:线性,执行比较动作或调用_Pred()numElems次

使用例子:

template<typename T>
inline void INSERT_ELEMENTS(T& coll, int first, int last)
{
	for (int i = first; i <= last; ++i)
	{
		coll.insert(coll.end(), i);
	}
}
template<typename T>
inline void PRINT_ELEMENTS(const T & coll, const string& optcstr = "")
{
	cout << optcstr;
	for (auto elem : coll)
	{
		cout << elem << ' ';
	}
	cout << endl;

}
int main()
{
	list<int>a;
	INSERT_ELEMENTS(a, 1, 6);
	INSERT_ELEMENTS(a, 1, 9);
	PRINT_ELEMENTS(a);
	remove_copy(a.cbegin(), a.cend(), ostream_iterator<int>(cout, " "), 3);
	cout << endl;
	remove_copy_if(a.cbegin(), a.cend(), ostream_iterator<int>(cout, " "), [](int elem) {return elem > 4; });

	multiset<int>b;
	remove_copy_if(b.cbegin(), b.cend(), inserter(b, b.end()), bind(less<int>(), _1, 4));
	PRINT_ELEMENTS(b);
}

在这里插入图片描述

你可能感兴趣的:(C++STL,c++,stl,复制时一并移除元素,remove_copy,remove_copy_if)