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
内容来源于网络如有侵权请私信删除
你还没有登录,请先登录注册
  • 还没有人评论,欢迎说说您的想法!

相关课程