C++ STL算法系列--copy函数
来源:互联网 发布:心蓝软件 编辑:程序博客网 时间:2024/05/02 03:00
C++ STL算法系列--copy函数
现在我们来看看变易算法。所谓变易算法(Mutating algorithms)就是一组能够修改容器元素数据的模板函数,可进行序列数据的复制,变换等。
从上例中我们看出copy算法可以很简单地将一个容器里面的元素复制至另一个目标容器中,上例中代码特别要注意一点就是myvector.resize(7);这行代码,在这里一定要先为vector分配空间,否则程序会崩,这是初学者经常犯的一个错误。其实copy函数最大的威力是结合标准输入输出迭代器的时候,我们通过下面这个示例就可以看出它的威力了。
现在我们来看看变易算法。所谓变易算法(Mutating algorithms)就是一组能够修改容器元素数据的模板函数,可进行序列数据的复制,变换等。
我们现在来看看第一个变易算法:元素复制算法copy。该算法主要用于容器之间元素的拷贝,即将迭代器区间[first,last)的元素复制到由复制目 标result给定的区间[result,result+(last-first))中。下面我们来看看它的函数原型:
1 template<class InputIterator, class OutputIterator> 2 OutputIterator copy( 3 InputIterator _First, 4 InputIterator _Last, 5 OutputIterator _DestBeg 6 );
参数
- _First, _Last
- 指出被复制的元素的区间范围[ _First,_Last).
- _DestBeg
- 指出复制到的目标区间起始位置
返回值
返回一个迭代器,指出已被复制元素区间的最后一个位置
程序示例:
首先我们来一个简单的示例,定义一个简单的整形数组myints,将其所有元素复制到容器myvector中,并将数组向左移动一位。
1 #include <iostream> 2 #include <algorithm> 3 #include <vector> 4 5 using namespace std; 6 7 int main () 8 { 9 int myints[] = {10, 20, 30, 40, 50, 60, 70}; 10 vector<int> myvector; 11 vector<int>::iterator it; 12 13 myvector.resize(7); // 为容器myvector分配空间 14 15 //copy用法一: 16 //将数组myints中的七个元素复制到myvector容器中 17 copy ( myints, myints+7, myvector.begin() ); 18 19 cout << "myvector contains: "; 20 for ( it = myvector.begin(); it != myvector.end(); ++it ) 21 { 22 cout << " " << *it; 23 } 24 cout << endl; 25 26 //copy用法二: 27 //将数组myints中的元素向左移动一位 28 copy(myints + 1, myints + 7, myints); 29 30 cout << "myints contains: "; 31 for ( size_t i = 0; i < 7; ++i ) 32 { 33 cout << " " << myints[i]; 34 } 35 cout << endl; 36 37 return 0; 38 }
从上例中我们看出copy算法可以很简单地将一个容器里面的元素复制至另一个目标容器中,上例中代码特别要注意一点就是myvector.resize(7);这行代码,在这里一定要先为vector分配空间,否则程序会崩,这是初学者经常犯的一个错误。其实copy函数最大的威力是结合标准输入输出迭代器的时候,我们通过下面这个示例就可以看出它的威力了。
#include <iostream> 2 #include <algorithm> 3 #include <vector> 4 #include <iterator> 5 #include <string> 6 7 using namespace std; 8 9 int main () 10 { 11 typedef vector<int> IntVector; 12 typedef istream_iterator<int> IstreamItr; 13 typedef ostream_iterator<int> OstreamItr; 14 typedef back_insert_iterator< IntVector > BackInsItr; 15 16 IntVector myvector; 17 18 // 从标准输入设备读入整数 19 // 直到输入的是非整型数据为止 请输入整数序列,按任意非数字键并回车结束输入 20 cout << "Please input element:" << endl; 21 copy(IstreamItr(cin), IstreamItr(), BackInsItr(myvector)); 22 23 //输出容器里的所有元素,元素之间用空格隔开 24 cout << "Output : " << endl; 25 copy(myvector.begin(), myvector.end(), OstreamItr(cout, " ")); 26 cout << endl; 27 28 return 0; 29 }
1 0
- C++ STL算法系列6---copy函数
- C++ STL算法系列6---copy函数
- C++ STL算法系列---copy函数
- C++ STL算法系列--copy函数
- C++ STL算法系列6---copy函数
- c++STL 中的copy函数
- STL中copy算法
- STL算法之copy
- 【STL】算法 — copy
- stl之算法copy
- stl算法copy
- STL copy函数
- STL copy()函数用法
- STL标准算法库 copy函数的闪光应用
- c++STL中copy函数的用法解读
- [C++/STL] string字符串关于copy函数的C4996错误
- [C++/STL] string字符串关于copy函数的C4996错误
- C++ STL算法系列1---count函数
- java-swing-动态调整窗体大小
- CentOS6.5 64位GCC从4.4.2升级到4.8.5实录
- java之十一 Java GUI
- 对称排序acm283
- 中缀表达式借用栈转换为后缀表达式
- C++ STL算法系列--copy函数
- Jboss运行WebService报错解决
- C++迭代器
- DFS、BFS搜索+题目
- Activity中 findViewById 获取控件对象正确的代码位置
- 总结三
- LeetCode题解——Verify Preorder Serialization of a Binary Tree
- Android Fragment 深入理解
- [Ubuntu]修改 Ubuntu 源为清华大学