C++ STL中不同的复制方法 | std :: copy(),copy_n(),copy_if(),copy_backward()

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 );

这里,first1last1表示将要被复制的范围,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)

该语法中,firstlast表示被复制元素的范围,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);

上述语法中,first1last1表示将要被复制的区间,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中的容器和算法之间使用。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程