STL算法 ------- 复制元素(Copying)
1.copy()
2.copy_backward()
3.注意:
(1) 没有copy_if()算法,可以使用remove_copy_if() 算法
(2) 复制过程中要逆转元素次序,使用 reverse_copy() 算法
(3) 把容器内所有元素赋值给另一个容器,要用赋值操作符或容器的assign()成员
(4) 复制过程中删除某些元素, 使用remove_copy() 和 remove_copy_if() 算法
(5) 复制中改变元素,使用transform() 或 replace_copy() 算法
#include <iostream>
#include <vector>
#include <list>
#include <algorithm>
using namespace std;
int main( int argc, char** argv )
{
list<int> lst;
for( int i=0; i<10; ++i )
{
lst.push_back(i);
}
for(list<int>::const_iterator itr=lst.begin(); itr!=lst.end(); ++itr)
{
cout<<*itr<<' ';
}cout<<endl;
vector<int> vec(lst.size()*2);
for(vector<int>::const_iterator itr=vec.begin(); vec.end()!=itr; ++itr)
{
cout<<*itr<<' ';
}cout<<endl;
copy(lst.begin(), lst.end(), vec.begin() );
for(vector<int>::const_iterator itr=vec.begin(); vec.end()!=itr; ++itr)
{
cout<<*itr<<' ';
}cout<<endl;
copy_backward(lst.begin(), lst.end(), vec.end());
for(vector<int>::const_iterator itr=vec.begin(); vec.end()!=itr; ++itr)
{
cout<<*itr<<' ';
}cout<<endl;
return 0;
}
#include <iostream>
#include <vector>
#include <list>
#include <iterator>
#include <algorithm>
using namespace std;
int main( int argc, char** argv )
{
list<int> lst;
for( int i=1; i<10; ++i )
{
lst.push_back(i);
}
for(list<int>::const_iterator itr=lst.begin(); itr!=lst.end(); ++itr)
{
cout<<*itr<<' ';
}cout<<endl;
//必须声明容器的大小
//vector<int> vec(9);
//copy(lst.begin(), lst.end(), vec.begin() );
vector<int> vec;
copy(lst.begin(), lst.end(), back_inserter(vec) );
for(vector<int>::const_iterator itr=vec.begin(); vec.end()!=itr; ++itr)
{
cout<<*itr<<' ';
}cout<<endl;
copy(lst.begin(), lst.end(), ostream_iterator<int>(cout, " "));
cout<<endl;
copy(lst.rbegin(), lst.rend(), vec.begin() );
for(vector<int>::const_iterator itr=vec.begin(); vec.end()!=itr; ++itr)
{
cout<<*itr<<' ';
}cout<<endl;
return 0;
}
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
int main( int argc, char** argv )
{
vector<char> source(10, '.');
for(int c='a'; c<='f'; ++c )
{
source.push_back(c);
}
source.insert(source.end(), 10, '.');
for(vector<char>::const_iterator itr=source.begin(); source.end()!=itr; ++itr)
{
cout<<*itr<<' ';
}cout<<endl;
vector<char> c1(source.begin(), source.end());
copy(c1.begin()+10, c1.begin()+16, c1.begin()+7);
for(vector<char>::const_iterator itr=c1.begin(); c1.end()!=itr; ++itr)
{
cout<<*itr<<' ';
}cout<<endl;
vector<char> c2(source.begin(), source.end());
copy_backward(c2.begin()+10, c2.begin()+16, c2.begin()+19);
for(vector<char>::const_iterator itr=c2.begin(); c2.end()!=itr; ++itr)
{
cout<<*itr<<' ';
}cout<<endl;
return 0;
}

浙公网安备 33010602011771号