C++ STL中不同的复制方法 | std :: copy(),copy_n(),copy_if(),copy_backward()
C ++标准库(STL)是C ++程序员的一个强大工具,STL中的容器和算法可用于处理各种数据结构。在STL中,复制是一种常见操作,这是因为它是容器和数组之间复制数据的最基本方式。 C ++ STL提供了几种不同的方法来复制数据,本文将介绍其中四种方法:std :: copy(),copy_n(),copy_if()和copy_backward()方法。
std :: copy()
std :: copy()方法可以复制一个范围内的元素,并将它们放入另一个范围中。该方法的语法是:
std::copy ( first1, last1, first2 );
这里,first1
和last1
表示将要被复制的范围,first2
表示目标范围。下面是一个使用std::copy()
的示例:
#include<iostream>
#include<vector>
#include<algorithm>
int main()
{
std::vector<int> vector1 = {1, 2, 3, 4, 5};
std::vector<int> vector2(5);
std::copy(vector1.begin(), vector1.end(), vector2.begin());
for(auto i : vector2){
std::cout << i << " ";
}
return 0;
}
将产生以下输出:
1 2 3 4 5
copy_n()
std :: copy_n()方法与std :: copy()方法相似,不过该方法复制的是一个范围内的前n个元素。该方法的语法是:
std::copy_n( first1, n, first2 );
上面的语法中,first1
表示将要被复制的区间,n
表示要复制的元素个数,first2
表示要复制到的目标区间。下面是一个使用copy_n()的示例:
# include <iostream>
# include <vector>
# include <algorithm>
int main()
{
std::vector<int> vector1 = {1, 2, 3, 4, 5};
std::vector<int> vector2(5);
std::copy_n(vector1.begin(), 3, vector2.begin());
for(auto i : vector2){
std::cout << i << " ";
}
return 0;
}
将产生以下输出:
1 2 3 0 0
上述示例中,我们将vector1的前三个元素复制到vector2中,由于vector2的大小为5,因此其余两个元素被自动初始化为0。
copy_if()
std::copy_if()方法将符合特定条件的数值复制到某个容器中。该方法的语法如下:
std::copy_if(first, last, result, unary_predicate)
该语法中,first
和last
表示被复制元素的范围,result
表示目标范围,unary_predicate
表示一个应用于元素的一元谓词(返回true或false)。
下面是一个使用copy_if()
方法的示例:
#include <iostream>
#include <vector>
#include <algorithm>
bool is_even(int i)
{
return i % 2 == 0;
}
int main()
{
std::vector<int> vector1 = {1, 2, 3, 4, 5};
std::vector<int> vector2(5);
std::copy_if(vector1.begin(), vector1.end(), vector2.begin(), is_even);
for(auto i : vector2){
std::cout << i << " ";
}
return 0;
}
将产生以下输出:
2 4 0 0 0
上面的示例中,我们将vector1中的所有偶数元素复制到vector2中,并将剩余的元素设置为0。
copy_backward()
std :: copy_backward()方法与std :: copy()方法类似,但是它从尾部开始复制元素到目标范围。该方法的语法如下:
std::copy_backward(first1, last1, last2);
上述语法中,first1
和last1
表示将要被复制的区间,last2
表示目标区间的结束位置。
下面是一个使用copy_backward()
函数的示例:
#include<iostream>
#include<algorithm>
#include<vector>
#include<iterator>
int main()
{
std::vector<int> v1 = {1, 2, 3, 4, 5};
std::vector<int> v2(5);
std::copy_backward(v1.begin(), v1.end(), v2.end());
for(auto i : v2){
std::cout << i << " ";
}
return 0;
}
将产生以下输出:
0 0 1 2 3
如上所述,copy_backward()
方法将从容器的最后一个元素开始复制元素,并将其放置到目标容器的最后一个元素开始的位置中。
结论
C ++ STL中提供了四种不同类型的复制函数,std::copy(),copy_n(),copy_if()和copy_backward()。这些函数旨在更方便地复制数据,使C ++程序员能够更有效地处理大规模数据集。尽管这些函数具有不同的语法和功能,但它们都可以在C ++ STL中的容器和算法之间使用。