DNF LOVE
C++ STL> Vector Container 에 대해 알아보자.(2차원 vector 사용) 본문
C++에서 배열과 비슷하게 많이 사용되는 시퀀스 컨테이너가 존재한다. 그것이 바로 [Vector]이다.
vector 컨테이너는 자동으로 메모리가 할당되는 배열이라고 생각하면 편하다. vector는 정말 편한 자료형식이다. 이는 template를 사용하기 때문에 다양한 데이터 타입으로 사용할 수 있다.(심지어 객체도 된다)
vector는 맨 뒷쪽에서 삽입과 삭제가 가능하며 중간에 값을 삽입하거나 삭제가 가능하다. 그러나 배열과 마찬가지로 중간 삽입 삭제는 상대적으로 비효율적이다.
vector를 사용하려면 #include <vector> 를 사용하여 헤더파일을 추가 해야한다.
1. vector 선언
#include <vector>
vector<int> v;
// vector<데이터타입> 변수명;
2. 생성자와 연산자
vector<int> v; // 비어있는 vector 생성
vector<int> v(5); // 0으로 초기화 된 5개의 원소를 가진 벡터 생성
vector<int> v(5, 2); // 2로 초기화된 5개의 원소를 가진 벡터를 생성
vector<int> temp(v); // v의 내용을 복사하여 temp라는 이름을 갖는 벡터 생성
3. 벡터의 다양한 멤버변수
1) v.assign(5, 2); // 2의 값으로 5개의 원소 할당
vector<int> v;
v.assign(5, 2);
for (int i = 0; i < v.size(); i++) {
cout << v[i];
}
// 결과 22222
2) v[index]; // index 번째 원소를 리턴한다. 범위를 점검하지는 않지만 속도는 빠르다.
3) v.at(index); // index 번째 원소를 리턴한다. v[index] 보다는 느리지만 범위를 점검한다.
4) v.front(); //첫 번째 원소를 리턴한다
5) v.back(); // 마지막 원소를 리턴한다.
6) v.clear(); // 모든 원소를 제거한다. 그러나 원소만 제거하고 메모리에 vector는 그대로 있다.
7) v.begin(); // 첫 번쨰 원소를 가리킨다(iterator와 사용)
8) v.end(); // 마지막의 다음을 가리킨다(iterator와 사용)
9) v.rbegin(); // reverse begin을 가리킨다. 즉, 거꾸로 해서 첫 번째 원소를 가리킨다(iterator와 사용)
10) v.rend(); // reverse end을 가리킨다. 즉, 거꾸로 해서 마지막의 다음을 가리킨다(iterator와 사용)
11) v.reserve(n); // n개의 원소를 저장할 위치를 예약한다. 즉, 미리 동적할당을 한다.
12) v.size(); // 벡터의 원소 갯수를 리턴한다. 즉, 할당된 메모리 안에 요소가 들어가있는 개수를 리턴한다.
13) v.capacity(); // 할당된 공간의 크기를 리턴한다. size()와는 자주 헷갈리지만 전혀 다른 기능을 갖고 있다. push_back이 일어날때마다 동적할당을 하면 비효율적이기 때문에 미리 정해둔 만큼 동적할당을 한번에 하기때문에 공간 할당의 기준은 점점 커지면서 capacity를 할당하게 된다.
14) v.swap(v2); // vector temp와 vector v의 모든 요소를 맞바꾼다. v의 할당된 메모리를 프로그램이 끝나기 전에 없애고 싶을 때, 즉 capacity를 없앨 때 사용한다. temp를 capacity가 0인 임시 객체로 만들어서 스왑한다.
15) v.empty(); // vector가 비어있으면 true이다. 비어있다의 기준은 size() 요소이다.
16) v.resize(n); // 크기를 n으로 변경한다. 더 커졌을 경우 default값인 0으로 초기화한다
17) v.resize(n, k); // 크기를 n으로 변경한다. 더 커졌을 경우 인자의 값을 k로 초기화한다.
4. 벡터의 삽입
1) v.push_back(1); // 마지막 원소 뒤에 원소 1을 삽입한다.
2) v.insert(2, 3, 4); // 2번째 위치에서 3개의 4값을 삽입하여 2번째 원소부터 뒤로 밀리게 된다.
3) v.insert(2, 3); // 2번째 위치에서 3의 값을 삽입하고 삽입한 곳의 iterator를 반환한다.
5. 벡터의 삭제
1) v.pop_back(); // 마지막 원소를 제거한다.
2) v.erase(iter); // iter가 가리키는 원소를 제거한다. size만 줄어들고 capacity(할당된 메모리)는 그대로 남는다.
6. 2차원 벡터
// 2차원 배열 선언
vector<vector<int>> v;
// v2[6][5] 배열 선언, 0으로 초기화
vector<vector<int>> v2(5, vector<int>(5));
//값 삽입
int serial = 0;
for (int i = 0; i < 6; i++) {
for (int j = 0; j < 5; j++) {
v2[i][j] = serial++;
}
}
//값 출력
for (vector<int> vec : v2) {
for (int n : vec)
printf("%3d ", n);
cout << endl;
}
'Programming > C++' 카테고리의 다른 글
c++ 문법> 반복자 Iterator(Vector를 사용하여 예제) (0) | 2019.10.23 |
---|---|
C++> STL(Standard Template Libary) Contains (0) | 2019.10.23 |
C++문법> STL의 string에 대해 알아보자. (string과 char 배열과의 차이) (0) | 2019.10.23 |
C++문법> 메모리 동적 할당 (0) | 2019.10.23 |
C++ 문법> String to char, char to String 형변환 (0) | 2019.10.23 |