C++ - 배열 vector와 2차원 vector

컴퓨터/C++

728x90
반응형

서론

C++ STL에서 제공하는 vector 클래스를 조금 더 풍부하게 사용하는 방법에 대해서 알아보도록 합시다. 

이 vector 클래스 자체를 배열의 형태로 사용하는 방법과 2차원 vector를 사용하는 예제를 통해 조금 더 vector와 C++ 문법에 익숙해져 보도록 합시다.

 

vector클래스가 뭔지 모른다면 이전 글을 참고 바랍니다.

 

 

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

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

blog-of-gon.tistory.com

 

배열 vector

vector를 선언하여 vector를 배열로 사용하는 방법입니다.

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

using namespace std;

int main() {

	vector<int> vector[3];

	vector[0].push_back(1);
	vector[0].push_back(2);
	vector[0].push_back(3);

	vector[1].push_back(1);
	vector[1].push_back(2);

	vector[2].push_back(1);
	vector[2].push_back(2);
	vector[2].push_back(3);
	vector[2].push_back(4);
	vector[2].push_back(5);

	for (int i = 0; i < 3; i++) {
		cout << "vector" << i << endl;
		for (int j = 0; j < vector[i].size(); j++) {
			cout << vector[i].at(j) << endl;
		}
		cout << endl;
	}
	return 0;
}

vector는 3개의 배열로 고정되나 vector안의 담기는 자료는 자유롭게 변경이 가능합니다.

 

2차원 vector

vector의 클래스 자체도 vector로 선언하면 조금 더 자유로운 자료구조의 형태로 사용할 수 있습니다.

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

using namespace std;

int main() {
	vector<vector<int>> vector1;

	vector<int> subvector0;
	vector<int> subvector1;
	vector<int> subvector2;

	vector1.push_back(subvector0);
	vector1.push_back(subvector1);
	vector1.push_back(subvector2);

	vector1.at(0).push_back(1);
	vector1.at(0).push_back(2);
	vector1.at(0).push_back(3);

	vector1.at(1).push_back(2);
	vector1.at(1).push_back(3);
	vector1.at(1).push_back(4);
	vector1.at(1).push_back(5);

	vector1.at(2).push_back(5);
	vector1.at(2).push_back(6);
	vector1.at(2).push_back(7);

	for (int i = 0; i < vector1.size(); i++) {
		cout << "vector" << i << endl;
		for (int j = 0; j < vector0[i].size(); j++) {
			cout << vector0[i].at(j) << endl;
		}
		cout << endl;
	}


	return 0;
}

 

이처럼 2차원 배열같이 하지만 추가적인 동적 할당이 자유로운 2차원 vector를 사용할 수 있습니다.

 

추가 tips - 생성자를 통한 2차원 배열 자동할당

위의 예제처럼 계속해서 1차원 vector를 만들어서 넣어주는 것은 비효율 적입니다.

따라서 생성자를 통해 처음부터 vector클래스를 셋팅해 줄 수 있습니다.

vector<vector<int>> vector1(3,vector<int>());

//동일한 동작
	vector<int> subvector0;
	vector<int> subvector1;
	vector<int> subvector2;

	vector1.push_back(subvector0);
	vector1.push_back(subvector1);
	vector1.push_back(subvector2);

 

2차원 vector를 사용하면 자유롭게 x y축을 늘릴수 있는 데이터 구조를 사용할 수 있게 됩니다.

 

728x90
반응형

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

C++ - STL vector 클래스 (손쉬운 동적배열)  (0) 2022.03.21
C++ - STL라이브러리 piar  (0) 2022.03.17
C++ - STL(Standard Template Libary)  (0) 2022.03.17

Commnet

G91개발일지

Gon91(지구일)

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

TODAY :

YESTER DAY :

TOTAL :