기존에 c를 하다가 이번에 c++로 넘어오게되었는데, 개인적으로 엄청 편리하다고 생각한 기능이 vector였다.
(물론 stack,queue도 많이 쓰지만 그 중에서 가장 유용하다고 생각함 ㅎㅎ..)
vector란 C++ STL(Standard Template Library)에 있는 container이다.
쉽게 이해하자면 자동으로 메모리 할당이 되는 배열이라고 생각하면 편하다.
--> 자동으로 메모리 할당이 된다는게 엄청나게 큰 이점이고 c++의 장점이라고 생각한다.
vector를 사용하기 위해서는 아래처럼 헤더파일을 추가해줘야한다.
#include <vector>
2)vector 선언방법
vector<자료형>배열이름; //자료형으로 배열을 만듬. 크기는 0
vector<자료형>배열이름(size) // size만큼 자료형으로 배열을 만듬. 배열 안의 값은 0
vector<vector<자료형>>배열이름 // 2차원 배열을 만듬. 크기는 0
vector<vector<자료형>>배열이름(m,vector<int>(n,0)); // 2차원 배열을 n*m으로 설정하고 0으로 초기화 시킴.
- n*m이라는것이 row의 개수가 m이고, col의 개수가 n이라는 뜻이다. 처음에 많이 헷갈렸었다..ㅎㅎ
vector<int>ary1(ary2); // ary1은 ary2를 복사해서 생성됨.
3)vector의 활용법
vector.at(idx);
- idx번째 원소를 참조한다.
- v[idx]보다 속도는 느리지만, 범위를 점검하므로 안전하다. (?)
vector[idx];
- idx번째 원소를 참조한다.
- 범위를 점검하지않으므로 v.at(idx)보다 빠르다.
vector.front();
- 첫번째 원소를 참조한다.
vector.back();
- 마지막 원소를 참조한다.
vector.clear();
- 모든 원소를 제거한다.
- 원소만 제거하고 메모리는 남아있다.
- size만 줄어들고 capacity는 그대로다.
여기서 짚고 넘어가야할게 있는데 쉽게 생각하면
- size는 벡터에서 실제로 값이 들어 있는 개수다.
- capacity는 메모리를 추가할당하지않아도, 저장할 수 있는 원소의 개수를 의미한다.
- 따라서 벡터의 size는 capacity를 초과할수 없다.
vector.push_back(a);
- 마지막 원소 뒤에 a를 추가한다.
vector.pop_back();
- 마지막 원소를 제거한다.
vector.resize(n,value);
- vector의 크기를 n으로 변경한다.
- 만약 vector의 크기가 커졌을 경우 , 인자의 값을 value로 초기화한다.
vector.size();
- vector의 size를 반환한다.(원소의 개수)
vector.empty();
- vector가 비어있다면 True
- vector가 비어있지않다면 FALSE
- 여기서 비었다는 뜻은 size가 0. 즉 원소의 개수가 0개일 때
vector는 단순 배열과 비교해서 속도가 느리다. 하지만 메모리를 효율적으로 관리하고,예외처리가 편리하다는 점과
그 밖에 편리한 기능이 많다.(push_back,pop_back등등)
출처 : https://blockdmask.tistory.com/70
[C++] vector container 정리 및 사용법
안녕하세요. BlockDMask 입니다. 오늘은 C++ STL의 sequence container 중에 정말 자주 쓰는 vector에 대해서 알아보겠습니다. <목차> 1) vector container 란? 2) vector의 사용 3) vector의 생성자와 연산..
blockdmask.tistory.com
https://hwan-shell.tistory.com/119
C++ vector사용법 및 설명 (장&단점)
C++의 vector는 C++ 표준라이브러리(Standard Template Library)에 있는 컨테이너로 사용자가 사용하기 편하게 정의된 class를 말합니다. vector를 생성하면 메모리 heap에 생성되며 동적할당됩니다. 물론 속
hwan-shell.tistory.com
'Skils > C++' 카테고리의 다른 글
| ios_base::sync_with_stdio(false),cin.tie(nullptr),cout.tie(nullptr)을 붙여야 하는 이유 (0) | 2022.08.16 |
|---|---|
| [C++] 공백을 포함한 문자열 처리[getline(),cin.getline(),gets_s(),stringstream] (0) | 2022.06.28 |
| [C++] range based for(범위기반 for 반복문) (0) | 2022.06.23 |
| [c++]- map (0) | 2022.05.01 |