一:
copy
算法是 C++ STL 中的一个常用算法,用于将一个范围内的元素复制到另一个范围。它的函数原型如下:
template<class InputIt, class OutputIt> OutputIt copy(InputIt first, InputIt last, OutputIt d_first);
这个算法接受三个参数:
first
和last
是输入范围的迭代器,表示要复制的元素范围。first
指向要复制的第一个元素,last
指向要复制的最后一个元素的下一个位置。d_first
是输出范围的迭代器,表示复制的目标位置。复制的元素将从d_first
开始,覆盖原有的元素,直到复制完所有的元素。
std::copy
算法会将输入范围 [first, last)
中的元素复制到输出范围 [d_first, d_first + (last - first))
中。它会返回一个迭代器,指向复制的范围的下一个位置,即 d_first + (last - first)
。
cpp
void test01()
{
vector<int>v = { 1,2,5,3,2 };
vector<int>v2;
v2.resize(v.size());
copy(v.begin(), v.end(), v2.begin());
for_each(v2.begin(), v2.end(), [](int val)->void {cout << val << " "; });
}
二:
replace
算法是 C++ STL 中的一个常用算法,用于替换容器中的所有匹配元素。它的函数原型如下:
template<class ForwardIt, class T> void replace(ForwardIt first, ForwardIt last, const T& old_value, const T& new_value);
这个算法接受四个参数:
first
和last
是容器中的迭代器,表示要替换的元素范围。first
指向要替换的第一个元素,last
指向要替换的最后一个元素的下一个位置。old_value
是要被替换的值。new_value
是替换后的值。
std::replace
算法会遍历输入范围 [first, last)
中的所有元素,将与 old_value
相等的元素替换为 new_value
。
cpp
struct myfunc
{
bool operator()(int val)
{
return val > 3;
}
};
void test02()
{
vector<int>v = { 1,2,5,3,2 };
for_each(v.begin(), v.end(), [](int val)->void {cout << val << " "; });
cout << endl;
replace(v.begin(), v.end(), 2, 200);
for_each(v.begin(), v.end(), [](int val)->void {cout << val << " "; });
replace_if(v.begin(), v.end(), myfunc(), 200);
cout << endl;
for_each(v.begin(), v.end(), [](int val)->void {cout << val << " "; });
}
三:
swap是 C++ STL 中的一个常用算法,用于交换两个变量的值。它的函数原型如下:
template<class T> void swap(T& a, T& b);
cpp
void test03()
{
vector<int>v{ 1,2,3,4 };
vector<int>v1{6, 7, 8, 9};
swap(v, v1);
for_each(v.begin(), v.end(), [](int val)->void {cout << val << " "; });
cout << endl;
for_each(v1.begin(), v1.end(), [](int val)->void {cout << val << " "; });
cout << endl;
}