-
2024.02.29 - vectorC++ 2024. 3. 3. 21:19
- vector
vector는 자동으로 메모리가 할당되는 배열이라고 할 수 있다. 배열은 생성시 크기를 정해주어야 하고 그 크기가 가변적이지 않지만, vector는 배열과 비슷하지만 크기가 자동으로 늘어날 수 있다. 다만 속도적인 측면에서 배열에 비해 떨어진다는 단점이 있다.
- vector의 사용
vector를 사용하기 위해서는 <vector> 헤더파일을 추가해야한다. vector의 선언은 아래와 같이 이루어진다.
std::vector<데이터타입> 변수이름;
vector는 표준 라이브러리에 있는 클래스이므로 범위 지정 연산자로 std에서 왔음을 밝혀야한다.
- vector를 생성하는 다양한 예제
#include<vector> int main() { //1. 비어있는 vector 생성 std::vector<int> vec1; //2. 기본값이 0으로 초기화된 요소 5개를 가지는 vector 생성 std::vector<int> vec2(5); //3. 기본값이 2로 초기화된 요소 5개를 가지는 vector 생성 std::vector<int> vec3(5, 2); //4. vec3를 복사하여 vec4 생성 std::vector<int> vec4(vec3); //5. 벡터 생성후 1, 2, 3 으로 초기화 (요소 3개를 가짐) std::vector<int> vec5 = { 1,2,3 }; }
- vector의 값 참조하는 여러가지 방법
#include<iostream> #include<vector> int main() { std::vector<int> vec5 = { 1,2,3,4,5 }; //1. 배열 처럼 vec5[인덱스]로 참조하기 std::cout << vec5[1] << std::endl; //2. vector의 멤버 함수 .at(인덱스)로 참조하기 std::cout << vec5.at(2) << std::endl; //3. vector의 멤버 함수 .front()로 첫번째 요소 참조하기 std::cout << vec5.front() << std::endl; //4. vector의 멤버 함수 .back()으로 마지막 요소 참조하기 std::cout << vec5.back() << std::endl; }
- push_back(), pop_back()
vector의 마지막 요소를 추가하거나 제거할 수 있다.
#include<iostream> #include<vector> int main() { std::vector<int> vec5 = { 1,2,3,4,5 }; //vec5의 마지막 요소로 6을 추가한다. vec5.push_back(6); std::cout << vec5.back() << std::endl; //vec5의 마지막 요소를 제거한다. vec5.pop_back(); vec5.pop_back(); std::cout << vec5.back() << std::endl; }
- vector의 size와 capacity
vector의 멤버 함수 size()는 vector의 원소의 개수를 리턴한다. capacity()는 vector에 할당된 공간의 크기를 리턴한다.
#include<iostream> #include<vector> int main() { std::vector<int> vec5 = { 1,2,3,4,5 }; std::cout << vec5.size() << std::endl; std::cout << vec5.capacity() << std::endl; }
얼핏 size와 capacity는 다른 것 같지 않아 보인다. 그러나 vector의 원소의 갯수를 늘려보면 차이가 있음을 알 수 있다.
#include<iostream> #include<vector> int main() { std::vector<int> vec5 = { 1,2,3,4,5 }; vec5.push_back(6); std::cout << "size : " << vec5.size() << std::endl; std::cout << "capavity : " << vec5.capacity() << std::endl; std::cout << "=======" << std::endl; vec5.push_back(7); std::cout << "size : " << vec5.size() << std::endl; std::cout << "capavity : " << vec5.capacity() << std::endl; std::cout << "=======" << std::endl; vec5.push_back(8); std::cout << "size : " << vec5.size() << std::endl; std::cout << "capavity : " << vec5.capacity() << std::endl; std::cout << "=======" << std::endl; }
요소의 개수가 늘어날 때마다 메모리가 증가하는 것이 아니라, 한번 메모리가 늘어날 때 미리 공간을 어느정도 할당해 놓는 것을 알 수 있다. push_back이 일어날 때마다 동적할당을 하면 비효율적이므로 미리 정해둔 만큼 동적할당을 한번에 하는 것이다.
'C++' 카테고리의 다른 글
배열을 매개변수로 받는 함수 안에서 배열의 크기 구하기 (0) 2024.03.03 2024.02.29 - iterator (0) 2024.03.03 2024.02.28 - class 아주 기본적인 내용 (0) 2024.03.03 2024.02.28 - 키워드, 식별자, namespace, 범위 지정 연산자(::), std, using (0) 2024.03.02 2024.02.27 - 인수 전달 (0) 2024.02.27