复制元素
copy()
:将数据从一个容器拷贝到另一个容器,或将数据从容器的一个区间拷贝到另一个区间。copy_backward()
- 拷贝时必须保证有足够的空间。
- 没有
copy_if()
算法,可以使用remove_ copy_if()
算法 - 复制过程中要逆转元素次序,使用
reverse_copy()
算法 - 把容器内所有元素赋值给另一个容器,要使用赋值操作符或容器的
assign()
成员函数 - 复制过程中别除某些元素,使用
remove_copy()
和remove_copy_if()
算法 - 复制过程中修改元素,使用
transform()
或replace_copy()
算法
#include <iostream>
#include <vector>
#include <list>
#include <algorithm>
using namespace std;
int main()
{
list<int> ilist;
for (int i = 0; i < 10; ++i)
ilist.push_back(i);
for (list<int>::iterator iter = ilist.begin();
iter != ilist.end(); ++iter)
cout << *iter << ' ';
cout << endl;
vector<int> ivec(ilist.size() * 2);
for (vector<int>::iterator iter = ivec.begin();
iter != ivec.end(); ++iter)
cout << *iter << ' ';
cout << endl;
copy(ilist.begin(), ilist.end(), ivec.begin());
for (vector<int>::iterator iter = ivec.begin();
iter != ivec.end(); ++iter)
cout << *iter << ' ';
cout << endl;
copy_backward(ilist.begin(), ilist.end(), ivec.end());
for (vector<int>::iterator iter = ivec.begin();
iter != ivec.end(); ++iter)
cout << *iter << ' ';
cout << endl;
return 0;
}
#include <iostream>
#include <vector>
#include <list>
#include <algorithm>
#include <iterator>
using namespace std;
int main()
{
vector<int> ivec;
list<int> ilist;
for (int i = 1; i <= 9; ++i)
ivec.push_back(i);
copy(ivec.begin(), ivec.end(), back_inserter(ilist));
for (list<int>::iterator iter = ilist.begin();
iter != ilist.end(); ++iter)
cout << *iter << ' ';
cout << endl;
copy(ivec.begin(), ivec.end(), ostream_iterator<int>(cout, " "));
cout << endl;
copy(ivec.rbegin(), ivec.rend(), ilist.begin());
copy(ilist.begin(), ilist.end(), ostream_iterator<int>(cout, " "));
return 0;
}
#include <iostream>
#include <vector>
#include <list>
#include <algorithm>
using namespace std;
int main()
{
vector<char> source(10, '.');
for (int c = 'a'; c <= 'f'; c++)
source.push_back(c);
source.insert(source.end(), 10, '.');
for (vector<char>::iterator iter = source.begin();
iter != source.end(); ++iter)
cout << *iter << ' ';
cout << endl;
vector<char> c1(source.begin(), source.end());
copy(c1.begin() + 10, c1.begin() + 16, c1.begin() + 7);
for (vector<char>::iterator iter = c1.begin();
iter != c1.end(); ++iter)
cout << *iter << ' ';
cout << endl;
vector<char> c2(source.begin(), source.end());
copy_backward(c2.begin() + 10, c2.begin() + 16, c2.begin() + 19);
for (vector<char>::iterator iter = c2.begin();
iter != c2.end(); ++iter)
cout << *iter << ' ';
cout << endl;
return 0;
}