• 카테고리

    질문 & 답변
  • 세부 분야

    프로그래밍 언어

  • 해결 여부

    미해결

vector에 대해 질문드립니다.

21.11.06 01:47 작성 조회수 141

0

6장의 마지막에 vector에 대한 내용이 있느나, 혹시나 싶어 질문드립니다.

6.17 For-each 반복문 강의 영상에서 array를 동적 할당으로 받아오면 사용할 수 없다고 하셨습니다. 그리고 동적 할당 array대신 vector을 자주 사용하신다고 하셨는데, 여기서 질문드립니다. 

 

그렇다면 vector을 동적할당(?)으로 받아서 For-each문에서도 사용할 수 있는 건가요? 아직 동적할당에 대한 개념이 제대로 머릿속에 박히지 않아서.. 스스로 코드를 짜며 이해하기에는 힘들어서 질문드립니다. 여러번 반복해야겠어요 ㅠㅠ

 

강의 내용에서의 vector는 동적할당으로 사용한 것이 아니라서 문의드립니다!

 

답변 1

답변을 작성해보세요.

0

안소님의 프로필

안소

2021.11.06

안녕하세요!

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 를 돌릴 수 없는 것입니다. 자세한건 링크 참고해주세여

https://stackoverflow.com/questions/47363608/why-doesnt-c-support-range-based-for-loop-for-dynamic-arrays/47363658

 

이준우님의 프로필

이준우

질문자

2021.11.06

답변 감사합니다!   :)