728x90
반응형
주 언어가 C 다 보니, 코드 문제 풀이 사이트에서 자료구조가 필요할때 마다 직접 짜넣는게 매우 귀찮았다. C++이나 Python의 경우 기본적으로 자료구조가 구현되어 있다보니 부러운적이 많았다. (연산 시간 면에서는 C로 그냥 짜는게 훨 낫지만 말이다.)
본격 C++을 써야할 일이 생겨서, 공부하는 중에 Vector Container를 보고 무릎을 탁 쳤다. 진짜 편해서.. 오늘은 Vector Container에 대해 정리해보자.
1) vector Container
- 배열 + Stack 자료 구조가 합쳐진 역할을 수행한다.
- v.front(), v.back(), v.begin() 등 다양한 멤버함수가 존재한다.
2) vector 사용
- <vetor> 헤더 파일을 추가해야 함
- 선언 방식 vector<data type> 변수 이름
- ex) vector<int> a;
3) vector의 생성자와 연산자
- vector<int> a;
- 원소가 없는 vector a를 생성한다.
- vector<int> a(5);
- 5개의 원소를 가지고 기본값 (0)으로 초기화된 vector a를 생성한다.
- vector<int> a(5,2);
- 5개의 원소를 가지고 2로 초기화된 vector a를 생성한다.
- vector<int> a2(a1); vector<int> a1(5,2)
- a2는 vector a1을 복사하여 생성된다.
- vector<int> a1, vector<int>a2가 있고 내부에 인자들이 있는 경우,
- 연산자 "==", "!=", "<", ">", "<=", ">="로 대소 비교가 가능하다.
4) vector<int> a의 멤버 함수
- a.assign(n, m);
- n개의 원소를 m으로 할당
- a.at(idx);
- idx번째 원소를 참조함
- a[idx]보다 속도는 느림, 컨테이너 크기를 점검해서 out of bound error에서 안전함
- a.front();
- 첫번째 원소를 참조함
- a.back();
- 마지막 원소를 참조함
- a.clear();
- 모든 원소를 제거함
- 원소만 제거하고 메모리는 남아 있음
- a.push_back(m);
- 마지막 원소 뒤에 m를 삽입함
- a.pop_back();
- 마지막 원소를 제거함
- a.begin();
- 첫번째 원소를 가리킴
- a.end();
- 마지막 원소의 다음을 가리킴(?)
- a.rbegin();
- 컨테이너 원소를 reverse한 후 첫번째 원소를 가리킴
- a.rend();
- 컨테이너 원소를 reverse한 후 마지막 원소의 다음을 가리킴(?)
- a.resize(n);
- 컨테이너의 크기를 n 으로 변경합니다.
- 확장된 메모리 영역에 대해서는 0으로 초기화 합니다.
- a.resize(n, m);
- 컨테이너의 크기를 n으로 변경합니다.
- 확장된 메모리 영역은 m으로 초기화 합니다.
- a.size();
- 원소의 갯수를 반환함
- a.capacity();
- 할당된 메모리의 크기를 반환함
- a.insert(n, m, k);
- n번째 위치에 m개 원소를 삽입하고 k로 초기화 합니다. 뒷 인덱스 요소는 m만큼 밀립니다.
- a.insert(n, m);
- n번째 위치에 m 값을 삽입함
- a.erase(index);
- index가 가리키는 원소를 제거한다.
- size만 줄어들고 capacity는 그대로 남는다.
- a.empty();
- vector a 가 비어있으면 true를 리턴함
- 비어있다 -> size = 0, capacity와는 무관
5) Size와 Capacity
Size : 컨테이너에 있는 요소의 개수
Capacity : 할당된 메모리의 개수
- 컨테이너에 요소를 1개 추가할때마다 Size는 1씩 증가함
- 컨테이너에 요소를 1개 추가할때마다 Capacity는 2배로 증가함
- 1 -> 2 -> 4 -> 4 -> 8 -> 8 ....
728x90
반응형
'개념공부 > C, C++, IDE' 카테고리의 다른 글
[LeetCode] 1030. Matrix Cells in Distance Order, C++ (0) | 2023.01.09 |
---|---|
[C++] Unordered Map (작성 중) (0) | 2023.01.08 |
qsort (0) | 2023.01.02 |
[C/C++] 정수를 문자열에 저장하는 법, sprintf (0) | 2022.06.23 |
C - 매크로와 선행처리기 (0) | 2021.12.02 |