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이 출력됨을 확인할 수 있다.