std::copy 컨테이너 간의 범위 복사
컨테이너 간의 복사는 자료형이 다르더라도 카피 알고리즘에 의하여 호환성을 지닌다.
주의할 점은 덮의 씌워지는 대상의 객체의 사이즈가 원본컨테이너의 사이즈보다 같거나 커야한다.
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;
}