欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

STL算法:copy

程序员文章站 2022-06-26 10:01:07
STL算法:copy std::copy 函数在 \ 中声明,属于变易算法(Modifying sequence operations),主要用于实现序列数据的复制。 函数原型 声明 类型 InputIterator 输入迭代器 OutputIterator 输出迭代器 参数 first, last ......

STL算法:copy

std::copy 函数在 <algorithm> 中声明,属于变易算法(Modifying sequence operations),主要用于实现序列数据的复制。

函数原型

声明
template <class InputIterator, class OutputIterator>
    OutputIterator copy (
        InputIterator first, 
        InputIterator last, 
        OutputIterator result
    );
类型
  • InputIterator 输入迭代器

  • OutputIterator 输出迭代器

参数
  • first, last
    被复制的元素在区间[first, last)。
  • result
    目标序列的起始位置。
    result 不应该在[first, last)内,此时最好用std::copy_backword代替
返回值

返回目标序列的结束位置。

参考实现

template<class InputIterator, class OutputIterator>
  OutputIterator copy (InputIterator first, InputIterator last, OutputIterator result)
{
  while (first!=last) {
    *result = *first;
    ++result; ++first;
  }
  return result;
}

应用举例

#include <iostream>
#include <algorithm>
#include <vector>
#include <iterator>

int main()
{
    int arr[] = {1, 3, 5, 2, 4, 6};
    // 从 int * 复制到 ostream
    copy(arr, arr+6, ostream_iterator<int>(cout, " "));
    cout << endl;
    vector<int> v(7, 0);    //提前为vector分配空间
    // 从 int * 复制到 vector<int>
    vector<int>::iterator last = copy(arr, arr+6, v.begin());
    copy(v.begin(), last, ostream_iterator<int>(cout, " "));
    cout << endl;

    set<int> s{7, 8, 9};
    // 从 set<int> 复制到 vector<int>
    copy(s.begin(), s.end(), v.begin());
    copy(v.begin(), v.end(), ostream_iterator<int>(cout, " "));
    cout << endl;

    return 0;
}

输出:

1 3 5 2 4 6
1 3 5 2 4 6
7 8 9 2 4 6 0