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

블로그 이미지

요다할아범

,