C++ - STL vector 클래스 (손쉬운 동적배열)

컴퓨터/C++

728x90
반응형

서론

C++ STL 라이브러리에서 제공하는 vector클래스는 쉽게 원소를 추가 및 제거할 수 있는 가변 배열의 형태를 가진 컨테이너입니다.  즉 쉽게 동적으로 메모리를 할당하여 데이터를 관리할 수 있습니다.

엄밀히 따지자면, 배열과는 약간의 차이가 있지만 연속적으로 데이터를 저장하고 관리하기에 효과적입니다. 

본문에서는 vector를 직접 사용하는 예제를 보며 특징을 알아보도록 합시다.

 

사용하기전에

vector클래스를 사용하기 위해서 라이브러리를 추가해 주도록 합시다.

#include<iostream>
#include<vector>
#include<algorithm>

 

선언

vector클래스를 사용하기 위해 선언을 해줍시다. 다양한 형태로 선언이 가능합니다.

using namespace std;

int main()
{
	vector<int> vector1; //기본적인 선언
	vector<int> vector2(10); // 10개의 원소가 0으로 초기화 된 선언
	vector<int> vector3(10, 1); // 10개의 원소가 1로 초기화 된 선언
	vector<int> vector4(vector2); // vector2를 복사하여 선언
	return 0;
}

 

원소의 추가 및 제거 - push_back / pop_back

vector클래스의 메서드를 이용하여 손쉽게 추가 및 제거가 가능합니다.

	//원소의 추가 가장 뒤에 추가됩니다.
	vector1.push_back(10);
	vector1.push_back(5);
	vector1.push_back(1);
	//원소의 제거 가장 뒤의 원소가 제거됩니다.
	vector1.pop_back();

 

이터레이터를 통한 vector의 시작과 끝 - begine / end

STL 라이브러리에서는 이터레이터라는 컨테이너를 접근할 수 있는 방법을 제공한다고 했습니다. 

vector클래스 또한 컨테이너이므로 이터레이터를 통해 원소에 접근할 수 있습니다.

메서드를 통해 제공되는 녀석들을 사용해 봅시다.

	vector1.begin(); // 첫번 째 원소의 위치
	vector1.end(); // 마지막 원소의 위치

 

이터레이터를 통한 vector 특정 원소로 접근 및 원소 추가 제거 - insert / erase / clear

  • 특정 원소의 앞에 원소를 추가하기
	vector1.insert(vector1.begin(), 100); // vector1.begin()앞에 100정수 추가
	vector1.insert(vector1.begin()+1, 99); // vector1.begin()+1앞에 100정수 추가
  • 특정 원소의 값을 제거하기
	vector1.erase(vector1.begin()); //0번째 원소 제거
	vector1.erase(vector1.begin() + 2); //2번째 원소 제거
  • 모든 원소를 제거하기
	vector1.clear();

배열 형식으로 접근 및 사용하기

vector클래스는 배열의 형식처럼 접근 및 사용 또한 가능합니다.

vector1[0] = 3;

 

선언된 vector의 크기 

vector는 크게 2가지 크기를 제공합니다.

하나는 선언된 vector에 원소의 개수를 반환하고 , 다른 하나는 vector의 동적 메모리 할당된 크기를 반환합니다.

이처럼 2가지를 제공하는 이유는 vector클래스의 설계 특성상 원소를 제거하더라도 동적 할당된 메모리는 존재하기 때문입니다. 이 내용은 다른 글에서 좀 더 자세히 다루도록 하겠습니다.

	vector1.size();// 원소의 크기
	vector1.capacity(); //동적할당된 메모리의 크기

 

 

728x90
반응형

'컴퓨터 > C++' 카테고리의 다른 글

C++ - 배열 vector와 2차원 vector  (0) 2022.03.29
C++ - STL라이브러리 piar  (0) 2022.03.17
C++ - STL(Standard Template Libary)  (0) 2022.03.17

Commnet

G91개발일지

Gon91(지구일)

91년생 공학엔지니어의 개발일지

TODAY :

YESTER DAY :

TOTAL :