출저 : 프로그래밍 입문 사이트 ~bituse~ | http://bituse.info/cp/10

(140419 - 지식이 딸려서 배열을 인덱스라고 썼던 걸 수정)

(141110 - 인덱스 맞는데 왜 수정했을까라고 생각 중...;;)


우선 컨테이너 vector를 설명하겠습니다. vector를 이용하려면 vector라는 헤더 파일을 포함해야 합니다. 또한 std라는 네임 스페이스에 속합니다. 일단 아래의 코드를 봐주세요.


해당 코드는 제대로 실행되지 않게 보입니다. 그러므로 링크로 대체합니다. (문법 강조 지원)

소스 코드 보기


이것을 실행하면 이렇게 됩니다.




그럼 꽤 길지만 설명하겠습니다. main 함수 내에서 먼저 vector 컨테이너와 그 반복자[각주:1]를 선언합니다. 반복자는 컨테이너의 요소가 어떤 위치를 가리키고 있는지를 나타내는 포인터와 같은 것입니다. 각각 쓰는 법은


//컨테이너

vector<컨테이너의_형식>컨테이너_이름(필요하다면 생성자 인수 지정)

//반복자

vector<컨테이너의_형식>::iterator 반복자_이름


쯤이네요. 컨테이너 형식이라고 하는 곳에 앞으로 만드는 리스트의 형식을 지정합니다. int로 지정되면 컨테이너는 int 형식만 다룰 수 있습니다. 그 다음은 컨테이너 이름 뒤에 생성자의 인수를 지정할 수 있습니다. 첫 번째 인수에 요소 수를 두 번째 인수에 값을 지정합니다. 생략하면 요소 수가 제로로 만들어집니다.


반복기 선언에 관해서는 써있는대로 입니다만, ::iterator라고 써져있는 부분은 종류가 세 가지가 있는데,

  • iterator
  • reverse_iterator
  • const_iterator
가 되겠습니다. 각 요소에는 반복자를 사용하여 액세스 합니다. 예를 들어, 요소가 5개인 컨테이너가 있다고 합시다. 지금 반복시를 가리키는 위치가 첫 번째 요소라고 할 때, 다음 요소로 반복자를 이동하려면

++begin;

라고 씁니다. 이제 두 번쨰 요소에 반복자가 있게 된 것입니다. 이것이 보통의 iterator를 사용한 경우의 동작인데, reverse_iterator를 사용하면,
++begin;
라고 쓴다면 지금 가리키는 위치의 전 요소의 위치에 반복자를 이동시킵니다. 예를 들어, 현재 반복자의 위치가 요소 3을 가리킨다면, ++begin일 경우, 반복자가 요소 2의 위치로 이동합니다. ++라고 더했는데, 반복자의 위치가 돌아간다는 점을 주의하세요.
덧붙여서 iterator는 요소의 위치를 가리키는 그저 포인터 같은 것입니다. 그 요소의 실제 값을 갱신하려면, 포인터처럼 앞에 별표[각주:2]를 붙입니다. 이제 그 요소에 액세스 할 수 있고, 재작성, 혹은 읽기가 가능해집니다.

만약 const_iterator를 사용하여 반복자를 만든 경우, 다시 쓰거나 할 수 없으며 읽기만 됩니다. 추가로 iterator를 사용하여 반복기를 만들었다고 해도

--begin;


라고 쓰면 이전 요소에 반복자를 이동시킬 수 있습니다.

이제 컨테니어 만들기 및 반복자의 작성은 이해할 수 있겠나요? 다음은 각 함수에 대해서 설명하겠습니다.

우선 첫 번째, push_back 함수입니다. 이 함수에 값을 지정하면 해당 값을 컨테이너의 끝을 추가해줍니다. 이번 코드는 생성자에 아무것도 지정하지 않고 콘테이너를 만들었기 때문에 이 함수를 실행한 시점에서 컨테이너에 이 10의 값이 들어간 요소가 하나 밖에 없습니다. 다음 줄에 가서, 인덱스를 사용하여 요소에 액세스하고 값을 표시합니다. vector에 따라서 인덱스를 사용하여 요소에 액세스 할 수 있습니다. 하지만 앞으로 설명하는 다른 STL은 인덱스 사용할 수 없는 것도 있으므로 주의하시길 바랍니다. 

다음 줄 끝에 또 20을 세트합니다. 이 시점에서 10 → 20이라는 순서로 요소가 세트되고 있는 것입니다. 그런 다음 begin 함수와 end 함수를 사용하고 있습니다. 이것은 컨테이너의 첫 번째 요소의 반복자와 마지막에 다음 요소의 반복자를 돌려줍니다. end 함수는 마지막 요소 다음 요소의 반복자를 돌려줍니다. 주의 하세요.

그리고, 그 다음 그 반복자를 사용하여 컨테이너 내부 요소의 값을 모두 표시합니다. func 함수라는 것을 만들고, 첫 번째 인수와 두 번째 인수에 반복기가 오도록 설정합니다. 이와 같이 반복자도 형식으로 설정하여 함수로 이용하실 수 있습니다. func 함수 내부에서 for 루프문이 이루어지고 있습니다만, begin!=end라는 것에 주목해야 합니다.

begin에는 첫 번째 요소를 가리키는 반복자가, end는 마지막 요소의 다음을 가리키는 반복자가 들어있습니다. for 루프에서 ++begin을 하고 있기 때문에에, 1루프 당 반복자가 점점 끝으로 이동하게 됩니다. end가 마지막 다음 요소를 가리키고 있으며, begin이 더해져 가고, 마지막의 다음 요소까지 반복자가 이동했을 때, begin과 end는 등호 관계가 되기 때문에, begin!=end 조건에  어긋나지요? 즉 처음부터 마지막 요소까지 표시하고 루프를 빠지게 한다라는 겁니다. 이게 func 함수의 구조입니다.

반복자를 사용할 때는 이런 함수를 만들어두는 편이 여러가지로 편리합니다.


그리고 pop_back 함수를 설명하겠습니다. 이것은 컨테이너의 마지막 요소를 지우는 함수입니다. 실행한 후 사라지는 것을 알겠지요?


이상으로 이번 코드에 있는 함수의 설명은 끝입니다. 하지만 더 많은 기능을 제공하기 때문에, 대충 소개해두겠습니다.


assign()     요소를 할당

at()          지정된 위치의 요소의 반복자를 반환

back()      마지막 요소의 반복자를 반환

clear()       모든 요소를 제거

empty()    컨테이너가 비어있는지 여부를 판정. 비어있으면 참

erase()     요소를 제거 (인수는 삭제할 위치의 반복자를 지정)

front()      위로 요소의 반복자를 반환

insert()     요소를 삽입 (첫 번째 인수에 삽입할 위치의 반복자, 두 번째 인수 값)

max_size() 유지 할 수 있는 최대 요소 수를 반환

rbegin()    말미를 가리키는 역방향 반복자를 반환

rend()      선두를 가리키는 역방향 반복자를 반환

reszie()    요소 수를 변경함

size()       요소 수를 반환함

swap()     두 요소를 교환함


중요한 것들만 적었습니다만, 더 많이 있습니다. 사용법을 하나 하나 설명하자니 해가 져버리므로 굳이 소개하지 않습니다만 시험 삼아 사용해보면 의외로 간단하게 사용할 수 있기 때문에 사용해보시는 게 좋겠습니다. 다양하게 만져보세요.


이번 설명은 이상입니다. 다음은 list 컨테이너에 대해서 설명하겠습니다.

  1. iterator [이터레이터] [본문으로]
  2. * [본문으로]

'공부 > C/C++' 카테고리의 다른 글

(C++) 컨테이너 【deque】  (0) 2014.04.03
(C++) 컨테이너【list】  (0) 2014.03.29
(C++) STL에 대해서  (0) 2014.03.27
(C++) string 형식  (0) 2014.03.27
(C++) C++의 문자열 출력에 대해서  (0) 2014.03.26