SteffenLee

[C++]STL vector 본문

Progamming/C,C++

[C++]STL vector

SteffenLee 2018. 4. 7. 23:37

vector 라이브러리


vector는 타입이 모두 같은 객체의 모음이고, 객체를 담기 때문에 컨테이너(container)이라고 합니다.

배열과 유사한데 다른점이 있다면 메모리가 동적으로 할당된다는 것이다.

나머지 장점이나 단점은 글을 이어나가면서 설명하겠습니다.


vector는 헤더를 <vector>라는 것을 선언해야 사용가능합니다.

Ex)

1
2
3
4
5
6
7
8
#include<vector>
using std::vector;//이건 vector를 std::를 안쓰게 도와준다.
 
int main(){
    .
    .
    .
}
cs

그리고 vector는 클레스 템플릿입니다.


vector의 정의 및 초기화

정의 형식은 vector<type> 이름;이다.

vector의 정의 예시

1
2
3
4
5
6
7
8
9
#include<iostream>
#include<vector>
#include<string>
using namespace std;//std라는 이름공간을 사용해줌으로 std::를 할 필요가 없습니다.
int main() {
    vector<int> asdf;
    vector<char> qwer;
    vector<string> zxcv;//string헤더의 선언이 필요하다.
}

cs

vector의 정의는 위와 같은 형식으로 이루어진다.

그냥 정의만 하면 기본초기화가 되어 비어있는 vector가 됩니다.

그리고 vector의vector도 가능합니다.

vector<vector<int>> a; 이런 식으로 가능합니다.

C++11이전 문법에서는 vector<vector<int> >이런 식으로 띄어쓰기 한 칸을 넣었어야 했었습니다.


선언과 동시에 초기화도 가능하다. 

1
2
3
4
int maim(){
    vector<int> a;
    vector<int> asdf = (a);
}
cs


위와 같은 형식으로 복사 초기화가 가능합니다. 물론 데이터 타입은 똑같아야됩니다.


vector는 요소를 가지고 있어 목록 초기화가 가능합니다.

ex)

1
2
3
4
int maim(){
    vector<int> a = {1,2,3};
    vector<string> b = {"asdf","qwer"};
}
cs

그리고 주의해야할 점이 있다면 목록 초기화를 할 때에는 소괄호가 아닌 중괄호를 써야합니다.

그렇지 않으면 오류가 납니다.


그리고 개수와 요소의 값을 지정해 초기화도 가능합니다.

1
2
3
4
5
int main() {
    vector<int> a(101);//요소는 10개이고 각각 1로 초기화
    vector<int> b(10);//요소는 10개 각각 0으로 초기화
    vector<int> c{ 10 };//요소는 1개이며 10으로 초기화 되있다.
}
cs


vector 초기화 방법 

 vector<type> v1

type 객체를 담는 vector, 기본 초기화 되어 비어있음

 vector<type> v2(v1)

 v2는 v1의 각 요소의 복사본을 담음

vector<type> v3(n, val)

v3은 값이 val인 n개의 요소를 담는다. 

vector<type> v4(n)

v4는 값 초기화한 객체의 복사본이 n개이다. 

vector<type> v5{a,b,c, ...} 

v5는 요소 수가 초기 값 수와 같으며 각 요소는 해당 초기 값으로 초기화 한다. 

vector<type> v5 = {a, b, c, ...} 

v5와 동일 




요소 추가

만약 10개의 요소가 각각 다른 vector를 만든다면 목록 초기화를 쓰는 방법이 있습니다.

그런데 요소의 갯수가 20개, 50개 늘어 난다면 어떨까요?

이 vector의 경우는 목록 초기화를 쓰는데 한계가 있을겁니다.

이런 경우에는 vector의 멤버인 push_back을 사용하면 됩니다.

push_back은 마지막 요소 뒤에 새로운 요소를 추가하는 멤버입니다.


ex)

1
2
3
4
5
6
7
8
9
10
#include<iostream>
#include<vector>
#include<string>
using namespace std;
int main() {
    vector<int> a;
    int b;
    while (cin >> b)
        a.push_back(b);
}
cs

이런식으로 사용이 가능합니다.



vector의 연산

vector의 연산 

v.empty() 

v가 비었으면 true 그렇지 않으면 false 

v.size() 

v의 요소 수 반환 

v.push_back(t)

값이 t인 요소를 v 끝에 반환 

 v[n]

v에서 위치 n에 있는 참조자 반환 




감사합니다.

부족한 부분이 있다면 지적해주시면 감사하겠습니다.

Comments