STL之copy
来源:互联网 发布:新建工作流 php 编辑:程序博客网 时间:2024/05/14 21:36
需要的头文件:
numeric
源码:
//源码比较复杂,不予列出//有兴趣的可以参考sgi stl的源码
作用:
将输入区间[first,last)内元素复制到区间[result,result+(last-first))内。
例子:
//例子只给出使用方法,有很多细节不予阐述//具体细节参见 《STL源码剖析》 #include <iostream>#include <algorithm>#include <vector>#include <iterator>#include <deque>using namespace std;template <typename T>struct display{ void operator()(const T& x) { cout << x << " "; }};int main(){ { int ia[] = { 0,1,2,3,4,5,6,7,8, }; //输出区间与输入区间不重叠,没有冲突 copy(ia + 2, ia + 7, ia); for_each(begin(ia), end(ia), display<int>()); cout << endl; //2 3 4 5 6 5 6 7 8 } ////////////////////////////////////////////////// { int ia[] = { 0,1,2,3,4,5,6,7,8, }; //输出区间与输入区间重叠,有可能冲突 copy(ia + 2, ia + 7, ia+4); for_each(begin(ia), end(ia), display<int>()); cout << endl; //0 1 2 3 2 3 4 5 6 //本例正确,底层调用memmove,正确复制 } ////////////////////////////////////////////////// { int ia[] = { 0,1,2,3,4,5,6,7,8, }; //deque 具有 has no trivial assignment operator deque<int> id( begin(ia), end(ia) ); auto first = id.begin(); auto last = id.end(); auto result = id.begin(); cout << *result << endl; //0 ++++first; //advance(first,2) cout << *first << endl; //2 ----last; //advance(last,2) cout << *last << endl; //7 //输出区间的终点与输入区间不重叠,没有有冲突 copy( first, last, result ); for_each(id.begin(), id.end(), display<int>()); cout << endl; //2 3 4 5 6 5 6 7 8 } ////////////////////////////////////////////////// { int ia[] = { 0,1,2,3,4,5,6,7,8, }; //deque 具有 has no trivial assignment operator deque<int> id(begin(ia), end(ia)); auto first = id.begin(); auto last = id.end(); auto result = id.begin(); advance( result, 4 ); cout << *result << endl; //4 ++++first; //advance(first,2) cout << *first << endl; //2 ----last; //advance(last,2) cout << *last << endl; //7 //输出区间的终点与输入区间重叠,有可能冲突 copy(first, last, result); for_each(id.begin(), id.end(), display<int>()); cout << endl; //0 1 2 3 2 3 2 3 2 //本例错误,因为copy算法不再使用memmove(因为deque 具有 has no trivial assignment operator) //请注意,使用vector代替deque进行测试,复制结果将是正确的,因为vector的迭代器就是个原生指针 } return 0;}
注意:
- 注意输入区间和输出区间重叠的问题。十分重要
- 最好都可以去看看《STL源码剖析》关于这一知识点的讲解,注意区分has no trivial assignment operator 与 has trivial assignment operator。
- copy十分注重效率
0 0
- STL Algorithms 之 copy
- STL algorithm之copy
- stl 之 copy copy_backward
- STL算法之copy
- STL之copy
- stl之算法copy
- STL之copy
- C++ STL算法之:copy
- c++ STL之 copy(权哥)
- STL源码分析之copy算法
- STL算法之 copy、copy_backward、copy_n
- STL源码之copy算法分析
- stl::copy
- (转)STL笔记(3) copy()之绝版应用
- (Copy)数据结构与STL
- STL copy函数
- c++ stl --copy
- STL copy()函数用法
- 第一篇CSDN博客
- 学籍管理系统选择学校窗口缺陷报告
- Java网络编程之UDP
- listview 过滤后列表为空 清空后不显示之前数据
- 13、编程珠玑笔记十三搜索
- STL之copy
- 《水调歌头》
- leetcode--Remove Duplicates from Sorted Array II
- 在线考试系统——测试计划 详细测试报告——testlink
- [bzoj1406]密码箱 解题报告
- 2015长春网络赛(hdu 5442)
- 数据结构之---C语言实现括号匹配(栈实现)
- 14、编程珠玑笔记十四堆
- hdu 5441 Travel