Str::String::RevEvIcIft():STD::String::RevEvIsCopyIf()在C++中的应用

删除副本()

null

它是C++中的STL函数,它在算法库中定义。它将范围[first,last]中的元素复制到从结果开始的范围,但与给定元素进行比较的元素除外。

  • 结果范围比[first,last]短,与序列中匹配的元素一样多,这些元素被“删除”。
  • 未删除元素的相对顺序将保留。
  • 该函数使用运算符==将单个元素与给定值进行比较。

函数模板

ResultIterator remove_copy(ForwardIterator first, ForwardIterator last, 
ResultIterator result ,const T& ele);

first, last :  Forward iterators to the initial and final positions
in a sequence. The range used is [first, last), which contains all the elements
between first and last, including the element pointed by first but not 
the element pointed by last.

result : Output iterator to the initial position of the range 
where the resulting sequence is stored. The pointed type shall support being 
assigned the value of an element in the range [first, last).

ele : element to be removed.

例如:

Input : b d a f g h a k   given element is a
Output :b d f g h k _ _ 
Input : b k c s n m c l   given element is c
Output : b k s n m l _ _

'_' represent remove places

// CPP code to demonstrate remove_copy()
#include <vector>
#include <algorithm>
#include <iostream>
using namespace std;
// Function to remove_copy from v1 result vector is v2
void removecopyDemo(vector < int > &v1)
{
remove_copy(v1.begin(), v1.end(), v1.begin(), 3);
}
// Function to print content of vector
void print(vector< int >&v)
{
int len = v.size();
for ( int i = 0; i < len; i++)
cout << v[i] << " " ;
cout << endl;
}
// Driver code
int main()
{
// vector
vector < int > v1, v2(10);
// push data in vector
for ( int i = 10; i <= 25; i++)
v1.push_back(i % 6);
cout << "elements of v1 before remove_copy: " <<endl;
print(v1);
removecopyDemo(v1);
cout << "After removing element  3" <<endl;
print(v1);
return 0;
}


输出:

elements of v1 before remove_copy: 
4 5 0 1 2 3 4 5 0 1 2 3 4 5 0 1 
After removing element 3
4 5 0 1 2 4 5 0 1 2 4 5 0 1 0 1

复杂性:线性O(n)

删除_复制_如果

它是C++中的STL函数,它在算法库中定义。它将范围[first,last]中的元素复制到从结果开始的范围,但满足给定条件(如奇数、偶数、素数、非素数等)的元素除外。

  • 将范围[first,last]中的元素复制到从result开始的范围,条件函数返回true的元素除外。
  • 结果的范围比[first,last]短,与匹配的元素一样多,这些元素被“删除”。

函数模板

ResultIterator remove_copy_if(ForwardIterator first, ForwardIterator last,
                                 ResultIterator result, UnaryPredicate pred);
pred :  Unary function that accepts an element in the range as
argument, and returns a value convertible to bool. The value returned indicates
 whether the element is to be removed (if true, it is removed).

例如:

Input : 1 2 3 4 5 6 7 8 9 check if a number is prime and remove
Output :1 4 6 8 9 0 0 0 0

Input :1 2 3 4 5 6 7 8 9   check if a number is even and remove
Output :1 3 5 7 9 0 0 0 0

// CPP code to demonstrate remove_copy_if()
#include <vector>
#include <algorithm>
#include <iostream>
using namespace std;
bool IsOdd( int i) { return ((i % 2) != 0); }
// Function to remove_copy from v1 result vector is v2
void remove_copy_ifDemo(vector < int > &v1, vector< int > &v2)
{
remove_copy_if(v1.begin(), v1.end(), v2.begin(), IsOdd);
}
// Function to print content of vector
void print(vector< int >&v)
{
int len = v.size();
for ( int i = 0; i < len; i++)
cout << v[i] << " " ;
cout << endl;
}
// Driver code
int main()
{
// declare vector v1, v2
vector < int > v1, v2(10);
// push data in vector
for ( int i = 10; i <= 20; i++)
v1.push_back(i);
cout << "elements of v1 before remove_copy: " ;
print(v1);
remove_copy_ifDemo(v1,v2);
cout << "elements of v1 after remove_copy: " ;
print(v1);
cout << "After removing Odd Numbers from v1"
" copy result in vector v2" <<endl;
print(v2);
return 0;
}


输出:

elements of v1 before remove_copy: 10 11 12 13 14 15 16 17 18 19 20 
elements of v1 after remove_copy: 10 11 12 13 14 15 16 17 18 19 20 
After removing Odd Numbers from v1 copy result in vector v2
10 12 14 16 18 20 0 0 0 0

复杂性:线性O(n)

C++ STL中的库列表 C++的所有STL文章

© 版权声明
THE END
喜欢就支持一下吧
点赞10 分享