Vector 사용법 C+STL

C+STL인데도 C를 다루고 C+에 입문한 사람이라면 STL의 편리함에 감탄하는 사람도 있는 반면 그렇지 않은 사람도 있다. 필자는 예전에는 생소해서 어떻게 쓸지 몰라 전혀 쓰지 않았는데 쓰다 보면 감탄만 나온다. 따라서 이 Vector를 어떻게 사용하는지를 간단하게 서술하고자 한다.

선언 # include <vector>

벡터 간략 구조

대충 이런 구조다.

예를먼저보면서이해해보자.

STLvector는 마치 Linked List처럼 삽입이나 소거가 가능한데 배열처럼 데이터를 운용할 수 있다는 장점이 있다.

그리고 STL을 사용하는 가장 큰 이유는 저런 위와 같이 데이터를 관리할 때 임의의 데이터 유형으로도 바로 우리가 잘 알고 있는 데이터 구조를 바로 만들어 굴릴 수 있기 때문이다.

  1. 선언, 데이터 insert 벡터의 선언은 이하와 같다.vector <type 이름> variableName;
  2. 지금은 단순히 int로 했지만 나중에 전화번호부를 만들거나 하다 보면 사람에 대한 class의 정보를 가지고 자료 구조로 만들어 사용할 필요가 느껴질 때가 된다. 그럴 때 쓰면 정말 도움이 돼.
  3. push_back() 함수를 통해 vector 타입과 맞는 데이터를 넣을 수 있다.
  4. 2. 벡터 for로 돌리는 Vectoriteration이라는 멋진 말이 있다. 하지만 말이 중요한 게 아니라 결국 vector 전체를 한 번 보고 싶을 때 어떻게 하느냐가 중요하다. 배열과 같이 생각하면 다음과 같이 짤 수 있다.
  5. 벡터의 크기를 나타내는 size( )로 총 개수를 받고, 그만큼 index를 0에서 해당하는 크기만큼 돌게 된다. 이 방법의 장점은 기존의 배열과 for문 돌아가는 것이 거의 비슷해 vector 사용에 거리감이 없어진다. 하지만 vector로 사용하는 것이 아니라 배열처럼 쓰는 것이기 때문에 다른 vector의 좋은 기능과는 호환되지 않는다는 것이 단점이다.
  6. 다음 for 문장을 보자.갑자기 terator가 나와서 거부감이 들거야. iterate는 배열 같은 것을 for 같은 것으로 일주하는 것이고, iterator는 그것을 하는 것이다.
  7. for문 초기식을 다음과 같이 설정한다.vector <int > :: icteratorit = intVector.begin ( ) 여기서 맨 위의 간단 구조를 알아보자

begin이 맨 앞의 자료를 가리킨다. 그리고 *it를 통해 참조하여 해당 데이터를 얻는다.

배열로 보면

intarr [4] = {0, 1, 2, 3};

에서 arr[0]의 주소, 즉 &arr[0]에 해당하는 것.쉽게 말해 배열의 맨 앞 주소로 보면 이해하기 쉽다.

intVector.begin ( ) 이제 해당 주소를 vector <int > :: itterator 타입의 변수 it에 넣어주는 것이다 it은 변수명이므로 원하는 다른 것을 넣어도 된다.

for 세 번째 부분에 이른바 증감식이라 불리는 부분이 비어 있는 것을 알 수 있다. 그리고 본문에 it++로 다음 포인터를 가리키도록 할 수 있다. 본래 it++를 증감식 부분에 넣어도 상관없지만, 후술한 erase() 함수 때문에 이하의 본문에서 제외하였다. 따라서 특별한 경우가 없다면 그냥 본문으로 it++ 하는 것이 좋다.

3. For 문을 도는 도중 하나를 끄고 계속 돈다.for 문을 도는 이유는 다양하지만 돌아가면서 원하는 것을 지우고 싶을 때도 있다. 이 경우 배열은 해당 데이터를 지우고 나머지 데이터를 앞으로 일일이 끌어오는 작업을 해야 하는데 Vector는 그럴 필요가 없다. 이하의 예를 살펴보자.1번의 경우부터 0부터 6까지의 값을 intVector에 넣어 두었다. 따라서 지금은 01, 23, 456이라는 값이 꼬박꼬박 쌓여 있다. 이 중 만약 4라는 값을 발견하면 그것을 지우고 012356으로 하려면 어떻게 해야 할까? 라는 질문에 답은 “erase를 사용해 주세요”라는 대답이다.

  • it이 4일 경우가 왔다. 조건문이 만족하고 erase 함수가 실행된다.
  • 그렇다면 결과치는 무엇이 될까. 현재는 it는 vector에서 4라는 데이터를 가리킨다. 그러나 erase 함수가 실행되면 그 4는 사라지고 it은 다음 값을 가리키게 된다. 즉, 이 예에서는 5를 가리키게 된다.0123456xx↑xxxx로 012356xx↑x
  • 이렇게 달라지게 된다. 즉, erase의 역할이 해당 it을 지우고 다음에 넘겨주는 증감문 역할을 하고 있기 때문에 vector의 it을 사용할 경우에는 본문에서 it+를 쓰는 것이 코드를 작성할 때 유연하게 작성할 수 있게 된다.
  • 이 코드의 결과는 무엇이 될까.일단 *it은 4니까 처음에는 4가 출력된다. 그리고 erase를 거친 후의 it을 다시 *it로 참조하면 5가 나온다.
  • 4. 마지막 코드 확인.마지막으로 icteration을 돌면 위에서 4를 지웠기 때문에 012356이라는 결과가 나오는 것을 알 수 있다.

error: Content is protected !!