컨테이너 간의 복사는 자료형이 다르더라도 카피 알고리즘에 의하여 호환성을 지닌다.
주의할 점은 덮의 씌워지는 대상의 객체의 사이즈가 원본컨테이너의 사이즈보다 같거나 커야한다.
copy알고리즘을 사용하기전에 resize명령어로 컨테이너의 사이즈를 꼭 재조정 하도록 한다.
다음예제는 컨테이너와 컨테이너간에 값을 덮어 씌우는 방법이다.(추가가 아님!)
#include "stdafx.h"
#include <iostream>
#include <list>
#include <vector>
#include <deque>
#include <algorithm>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
list<int> a1;
vector<int> a2;
for(int i = 0; i < 10; ++i)
a1.push_back(i);
a2.resize(a1.size());
copy(a1.begin(), a1.end(), a2.begin());
deque<int> a3(a1.size());
copy(a1.begin(), a1.end(), a3.begin());
for(int i = 0; i < 10; ++i)
cout << a2[i] << ' ' << a3[i] << ' ';
cout << endl;
return 0;
}
다음 예제는 컨테이너에 반복자 어댑터를 사용하여 새로운 원소를 추가하는 방법이다.
미리 정의된 삽입 반복자에는 3가지가 있다
back_inserter(container) - push_back()을 사용하여 뒷부분에 추가시킨다
front_inserter(container) - push_front()를 사용하여 앞부분에 추가시킨다
inserter(container, pos) - insert()를 사용하여 pos위치에 삽입한다.
#include "stdafx.h"
#include <iostream>
#include <list>
#include <vector>
#include <deque>
#include <set>
#include <algorithm>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
list<int> a1;
for(int i = 0; i < 10; ++i)
a1.push_back(i);
//a1의 모든 원소들을 a2에 뒷부분으로 추가한다.
vector<int> a2;
copy(a1.begin(), a1.end(), back_inserter(a2));
//a1의 모든 원소들을 a3에 앞부분으로 추가한다.
deque<int> a3;
copy(a1.begin(), a1.end(), front_inserter(a3));
//a1의 원소들을 a4에 복사한다.
//연관 컨테이너는 오직 inserter()와만 동작한다.
set<int> a4;
copy(a1.begin(), a1.end(), inserter(a4.begin());
return 0;
}