인프런 커뮤니티 질문&답변
vector에 대해 질문드립니다.
작성
·
243
0
6장의 마지막에 vector에 대한 내용이 있느나, 혹시나 싶어 질문드립니다.
6.17 For-each 반복문 강의 영상에서 array를 동적 할당으로 받아오면 사용할 수 없다고 하셨습니다. 그리고 동적 할당 array대신 vector을 자주 사용하신다고 하셨는데, 여기서 질문드립니다.
그렇다면 vector을 동적할당(?)으로 받아서 For-each문에서도 사용할 수 있는 건가요? 아직 동적할당에 대한 개념이 제대로 머릿속에 박히지 않아서.. 스스로 코드를 짜며 이해하기에는 힘들어서 질문드립니다. 여러번 반복해야겠어요 ㅠㅠ
강의 내용에서의 vector는 동적할당으로 사용한 것이 아니라서 문의드립니다!
퀴즈
여러 개의 동일 자료형 데이터를 효율적으로 관리하기 위한 방법은 무엇일까요?
개별 변수 사용
배열 활용
상수 선언
포인터만 사용
답변 1
1
안녕하세요!
vector 자체가 동적할당 받은 것입니다. vector 는 동적 배열을 편리하게 사용할 수 있도록 이것저것 속성과 기능이 추가되어 만들어진 STL 클래스라고 봐주시면 될 것 같아용
for each 문의 원리는 첫번째 원소를 가리키는 반복자(STL 에 있는 iterator를 말합니다. 이건 16챕터가시면 배웁니다. 포인터랑 비슷해용)와 마지막 원소 '이후' 즉, 범위의 끝 너머를 가리키는 반복자를 사용하여 반복문을 돌리는 것입니다.
vector<int> vec(5);
for(int ele : vec) {
ele = 123;
}
예를 들어 위와 같은 for-each 문이 있다면 이는
vector<int> vec(5);
vector<int>::iterator itr;
for(itr = vec.begin(); itr != vec.end(); ++itr) {
*itr = 123;
}
일반 for문으로 이렇게 쓰는 것과 완전히 동일합니다! for-each 문을 풀어 쓰면 이런 느낌인거에요.
결론적으로 말씀드리자면 for-each 문에 돌릴 수 있는 컨테이너이기 위해선 그 컨테이너의 반복자(iterator)가 있어야한다는 의미입니다.
위 코드에서 볼 수 있듯이 vector 는 begin(), end() 를 지원하여 첫번째 원소를 가리키는 반복자, 범위를 초과한 공간을 가리키는 반복자를 가져올 수 있도록 지원하구요, 또 vector<int>::iterator 이렇게 vector<int> 의 원소들을 참조할 수 있는 반복자 타입을 지원합니다. 그래서 vector 는 for-each 에 돌릴 수 있습니다.
new 로 만든 array 는 반복자를 적용할 수 없어서 for-each 를 돌릴 수 없는 것입니다. 자세한건 링크 참고해주세여






답변 감사합니다! :)