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