일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 강참조
- 알고리즘
- UE4 커스텀로그
- 스마트포인터
- 언리얼엔진구조체
- map
- 람다사용정렬
- 프로그래머스
- 델리게이트
- 선택정렬
- 람다
- stl
- BFS
- 약참조
- 정렬알고리즘
- UML관련
- 데이터애셋
- UELOG
- 정렬
- UE_LOG
- 언리얼가비지컬렉터
- 애셋로드
- dataasset
- C++
- 크리티컬섹션
- unorder_map
- 자료구조
- enumasByue
- moreeffectiveC++
- C++최적화
- Today
- Total
기억을 위한 기록들
[CPP/STL] vector로 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요소들의 값을 복사해준것이기 때문이다.
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));
마찬가지로 원하는 값으로 할당 가능하다.
'C & CPP > STL(Standart Template Library' 카테고리의 다른 글
[C++/STL] 우선순위 큐(priority_queue) 관련 (0) | 2021.01.24 |
---|