본문 바로가기
Develop/Cpp

[C++] STL vector

by Tarra 2022. 6. 23.

 

 

 


개인 공부 후 자료를 남겨놓기 위한 목적이므로,
생략되거나 오류가 있을 수 있음을 알립니다.

 

 

C++의 표준 템플릿 라이브러리 중 하나인 <vector>에 대해서 알아보도록 하자.

 

 

 

 

vector란?


배열과 같이 데이터들을 순차적으로 보관하는 컨테이너이다.

 

간단히 말해, C++에서 일반적인 배열은 크기를 지정해주고 데이터를 담아주어야 하지만,

 

vector의 경우에는 일반적인 배열과 다르게 가변적으로 길이가 조정이 가능하며, 임의의 원소를 빠르게 처리할 수 있다.

 

 

 

 

 

 

어떻게 사용할까? 


코드의 헤더부분에 #include <vector> 를 입력하여 사용한다.

 

 

또한 vector<"자료형"> "변수명"; 을 입력하여 해당 vector를 선언할 수 있다.

 

 

 

 

 

 

vector의 여러 특징


 

배열 미리 만들기

vector 또한 일반적인 배열들과 마찬가지로 크기를 미리 지정하여 만드는 것이 가능하다.

 

다음과 같은 코드를 입력하면 100개로 이루어진 배열을 미리 만들어 놓을 수 있으며, 안의 값들은

 

기본적으로 쓰레기 값이 아닌 0으로 초기화가 되어있다.

 

(int, char 자료형의 경우에는 0으로 초기화, string의 경우에는 " "로 초기화가 되어있다.)

 

 

 

하지만 우리가 만약 0이 아닌 다른 값으로 초기화가 되어 있는 것을 원한다면,

 

다음과 같이 인자 하나를 더 넣어줌으로써 초기화 값을 다르게 할 수 있다.

 

 

예제를 통해 vector에 대해 더 알아보도록 하자.

 


첫 줄에 data의 개수 n이 주어지며,

두 번째 줄부터 n개의 줄에 걸쳐 공백을 기준으로 회원번호와 id가 주어진다고 하자.

이 회원번호와 di를 struct로 묶어, vector에 저장하려고 한다면 어떻게 코드를 짜야 할까?

 

다음 과 같은 방법으로 코드를 짜는 것이 가능하다.

 

(push_back() 과 같은 메소드는 좀 더 밑에서 배워보도록 하자.)

 

 

 

위에서 vector안에 struct를 넣었던 것처럼 

 

vector안에 vector를 넣는 구조도 가능하다.

 

이 경우, 자료형은 2차원 배열처럼 활용이 가능하며, 다음과 같은 vector가 존재한다면

 

v[2][2]와 같은 방법으로 접근할 수 있다.

 

중첩된 vector에 접근하는 방법

 

 

 

이처럼 python과 유사하게 자유롭게 다룰 수 있는 vector이지만,

 

주의해야 할 점이 있다.

 

 

위와 같이 vector를 형성할 경우 , 배열을 복제하는 느낌으로 생성이 되기 때문에,

 

2차원 배열이 아닌 1차원 배열 2개를 다루는 것과 같게 된다.

 

따라서 출력 값은 "1"이 나온다.

 

 

 

 

 

 

vector의 여러 메소드


push_back("value")

가장 기초가 되는 메소드이다.

 

생성된 vector의 맨 뒤에 "value" 를 추가하는 메소드이다.

 

python 의 list.append("value:")와 비슷하다고 생각하면 편하다.

 

 

 

insert( iterator position, "value" )

여기서의 iterator position에는 begin과 end같은 반복자가 들어간다.

 

v.begin() // 시작 주소 "같은" 반복자
v.end() // 끝 주소 "같은" 반복자

 

v라는 이름을 가진 vector의 2번 인덱스에 5라는 수를 끼워넣고 싶다고 하자.

 

그럼 다음과 같은 코드를 짜면 된다.

 

 

 

 

 

resize("size")

만약 5개로 짜여진 vector가 있다고 하자, 이때 이  vector의 크기를 10으로 늘리고 싶다고 한다면 

 

resize()를 사용하면 된다.  해당 코드는 다음과 같이 사용하면 되며,

 

5개로 짜여진 vector를 10으로 늘리게 된다면, size에서 부족한 만큼 추가적으로 크기를 늘리고,

 

3으로 줄인다면 넘치는 개수만큼 삭제를 하게 된다.

 

5로 만들어진 vector를 10으로 늘리는 코드

 

 

 

 

erase(iterator position)

insert와 비슷한 로직으로 해당 iterator position의 값을 삭제하는 메소드이다.

 

 

 

 

pop_back()

push_back()에 반대되는 메소드로 push_back()이 변수를 맨 뒤에 추가하는 것이라면

 

pop_back()의 경우에는 배열의 맨 뒤의 값을 삭제하는 메소드이다.

 

 

 

swap()

자주 사용되는 메소드는 아니지만, 

 

 

위와 같은 코드를 짜게 되면 v와 v2의 배열이 서로 바뀌게 된다.

 

 

 

 

'Develop > Cpp' 카테고리의 다른 글

[C++] STL cmath, map  (0) 2022.06.29
[C++] sort (정렬)  (0) 2022.06.25
[C++] String 클래스  (0) 2022.06.22
[Cpp] Direct 배열  (0) 2022.06.22
[Cpp] 문자열 함수 (cstring)  (0) 2022.06.22