2차원 벡터 선언 여러가지 방법

1. 원래의 vector

일반 vector는 보통 이렇게 사용한다.

std::vector<int> arr; arr.push_back(1); arr.push_back(2); arr.push_back(3);

순서대로 들어가게 된다.

2. 2차원 vector

하지만 2차원 배열은 어떻게 써야할까? 우선 자료형 안에 또하나의 vector를 선언 해준다.

std::vector<std::vector<int>> arr2;

그리고 똑같이 넣어보려 했으나...

std::vector<std::vector<int>> arr2; arr2.push_back(1);//에러!

컴파일 에러가 발생한다.

해결로는 

std::vector<std::vector<int>> arr2; std::vector<int> arr;

별도의 int 자료형만 담는 vector를 만들어주고,

std::vector<std::vector<int>> arr2; std::vector<int> arr; arr.push_back(1); arr.push_back(2); arr.push_back(3); arr2.push_back(arr);

위와 같이 입력해주면 된다.

arr2 vector의 첫번째 요소로 arr 자체(1,2,3이 포함되어 있는)가 들어가게 된다.

그리고 접근하려고 한다면,

std::vector<std::vector<int>> arr2; std::vector<int> arr; arr.push_back(1); arr.push_back(2); arr.push_back(3); arr2.push_back(arr); std::cout << arr2[0][0] << std::endl; //1출력! std::cout << arr2[0][1] << std::endl; //2출력 std::cout << arr2[0][2] << std::endl; //3출력

2차원배열과 같아진다. 주의 할점은 

std::cout << arr2[0][3] << std::endl; //컴파일은 성공

비어 있는 요소의 컴파일은 성공되나 런타임 에러가 발생하게 된다.

vector subscript out of range (벡터 첨자가 범위를 벗어남.)

다시 새로 추가해주려고 한다면,

std::cout << arr2[0][0] << std::endl; std::cout << arr2[0][1] << std::endl; std::cout << arr2[0][2] << std::endl; arr2[0].push_back(6); std::cout << arr2[0][3] << std::endl;

arr2의 0번 인덱스에 6번을 넣어준다. 하지만 여기서 또 주의 할점은 

arr2의 0번 인덱스 vector에 넣어준다고 해서 원래 1,2,3값이 들어 있는 arr벡터에도 6이 들어가는 것은 아니다.

참조하고 있는게 아니라 이전에 그냥 arr의 vector요소들의 값을 복사해준것이기 때문이다.

arr벡터에는 6 값은 없다.

3. vector의 초기화와 할당

이외에 vector을 처음 초기화 해줄때,

std::vector<int> arr(10);

이렇게 선언해준다면 선언과 동시에 0개의 공간 0으로 초기화해준다.(진짜 배열같다)

그리고 0이외에 선언과 동시에 같은 값으로 초기화도 가능하다.

std::vector<int> arr(10,7);

이렇게 해준다면 10개의 공간을 7의 값으로 초기화 해준다.

마찬가지로 2차원 vector 또한 

std::vector<std::vector<int>> arr2(10);

이렇게 10개의 공간으로 미리 초기화가 가능하다.

그리고 이제 각각의 10개의 공간들을 vector로 마찬가지로 초기화 해주고 싶다면,

std::vector<std::vector<int>> arr2(10,std::vector<int>(5));

10개의 vector들을 5개씩 할당해준다. 값은 마찬가지로 기본 0이 들어가 있다.

std::vector<std::vector<int>> arr2(10,std::vector<int>(5,7));

마찬가지로 원하는 값으로 할당 가능하다.

Toplist

최신 우편물

태그