~cpp
#include <iostream>
#include <vector>
using namespace std;
typedef vector<int>::iterator VIIT; // Object형이라면 typedef vector<Object>::iterator VOIT;
int main()
{
int ar[10] = {45,12,76,43,75,32,85,32,19,98}; // Object형이라면 Object ar[10]={...};
vector<int> v(&ar[0], &ar[10]);
// Object형이라면 vector<Object> v(...);
// ar배열의 0번 원소부터 9번원소까지를
// v벡터에다가 복사 [0,10) 처음엔 폐구간
// 마지막엔 개구간이라는거 명심!
for(VIIT it = v.begin() ; it != v.end(); ++it) // 제대로 복사됐나 결과 보기
cout << *it << endl;
return 0;
}
- typedef으로 시작하는 부분부터 보자. 일단 반복자라는 개념을 알아야 되는데, 사실은 나도 잘 모른다.
; 처음 배울땐 그냥 일종의 포인터라는 개념으로 보면 된다. vector<int>::iterator 하면 int형 vector에 저장되어 있는 값을 순회하기 위한 반복자이다. 비슷하게 vector<Object>>::iterator 하면 Object형 vector에 저장되어 있는 값을 순회하기 위한 반복자겠지 뭐; 간단하게 줄여쓸라고 typedef해주는 것이다. 하기 싫으면 안해줘도 된다.--;
- 다음엔 vector<int> v~~ 이부분을 보자. vector<T> 에는 생성자가 여럿 있다. 그 중의 하나로, 배열을 복사하는 생성자를 써보자. 그냥 쓰는법만 보자. 단순히 배열 복사하는 거다. C++ 공부했다면 성안당 10장인가 11장에 복사 생성자라고 나올것이다. 그거다.
; 그냥 2번 원소에서 5번원소까지 복사하고 싶다. 하면 vector<int> v(&ar2, &ar6) 이렇게 하면 되겠지?(어째 좀 거만해 보인다. 마지막은 개구간이라는걸 명심하기 바란다.
- for 부분을 보면 앞에서 typedef 해준 VIIT 형으로 순회하고 있는것을 볼수 있다. vector<T>의 멤버에는 열라 많은 멤버함수가 있다. 그중에 begin() 은 맨 처음 위치를 가르키는 반복자를 리턴해준다. 당연히 end()는 맨 끝 위치를 가르키는 반복자를 리턴해주는 거라고 생각하겠지만 아니다.--; 정확하게는 '맨 끝위치를 가르키는 부분에서 한 칸 더간 반복자를 리턴'해주는 거다. 왜 그렇게 만들었는지는 나한테 묻지 말라. 아까 반복자는 포인터라고 생각하라 했다. 역시 그 포인터가 가르키는 값을 보려면 당연히 앞에 * 을 붙여야겠지.