C++/자료구조
C++ [자료구조] / #Vector의 구조와 클래스 사용법
공부하는 신입사원
2023. 3. 12. 15:46
Vector
Vector 정의 및 특징
- 하나의 클래스라고 할 수 있음. 안에 여러 함수들을 이용해 동적으로 배열을 사용할 수 있음.
- template을 이용하여 구현되었기 때문에 vector의 원소들은 다양한 형을 가질 수 있다.
- 메모리 heap에 생성되어 동적할당됨. / 즉, 자동으로 메모리가 할당되는 배열이다.
- vector는 배열처럼 원소들을 순서대로 저장하는 컨테이너이다.
- 빨간 화살표는 원소를 삽입하는 멤버함수들이다. 가장 뒤에 삽입도 가능하고 중간에 삽입도 가능하다. 단, 중간에 삽입할 시 그 뒤의 모든 원소들이 한칸씩 밀려야하므로 자주 사용하는 것은 효율적이지 못하다.
멤버 함수
Vector의 초기화
vector<int> vec; // 벡터 생성
vector<int> vec(3); // 숫자만큼 벡터 생성 후 0으로 초기화
vector<int> vec = { 0,1,2,3 }; // 벡터 생성 후 오른쪽 변수 값으로 초기화
vector<vector<int>> vec; // 2차원 벡터 생성
vec.assign(5, 10); // 벡터의 범위 내에서 해당 값으로 초기화
Vector의 Iterators
vec.begin(); //벡터 시작점의 주소 값 반환
vec.end(); //벡터 (끝부분 + 1) 주소값 반환
vec.rbegin(); //벡터의 끝 지점을 시작점으로 반환
vec.rend(); //벡터의 (시작 + 1)지점을 끝 부분으로 반환
Vector Element Access (벡터의 요소 접근)
vec.at(i); //벡터의 i번째 요소 접근 (범위 검사함)
vec[i]; //벡터의 i번째 요소 접근 (범위 검사 안함)
vec.front(); //벡터의 첫번째 요소 접근
vec.back(); //벡터의 마지막 요소 접근
vec.erase(iterator, iterator+N); // iterator 주소부터 iterator+N-1 주소에 있는 요소 삭제
Vector Capacity (벡터용량)
vec.empty(); // 벡터가 빈공간이면 true, 값이 있다면 false
vec.size(); // 벡터의 크기 반환
vec.capacity(); // heap에 할당된 벡터의 메모리 크기 반환
vec.max_size(); // 벡터가 system에서 만들어 질 수 있는 최대 크기 반환
vec.reserve(5); // 벡터의 크기를 5호 설정
vec.shrink_to_fit() // capacity의 크기를 벡터의 실제 크기에 맞춤
클래스 사용 예시
코드는 더보기에 첨부
더보기
#include <iostream>
#include <vector>
using namespace std;
int main()
{
vector<int> vec;
cout << "vector size : " << vec.size() << '\n';
cout << "vector empty : " << vec.empty() << '\n';
cout << '\n';
for (int i = 1; i <= 10; i++)
{
vec.push_back(i);
}
cout << "vector size : " << vec.size() << '\n';
cout << "vector empty : " << vec.empty() << '\n';
cout << "vector element : ";
for (int i = 0; i < vec.size(); i++)
{
cout << vec[i] << ' ';
}
return 0;
}
- 출력창을 보면 vector 객체 생성 초기에는 size = 0 , 그리고 empty는 1(true)이 출력되는 것을 확인할 수 있다.
- 이후 1~10까지 원소를 push_back한 뒤에는 size = 10 , 그리고 empty는 0(false), 원소들은 1~10이 출력됨을 확인할 수 있다.