인프런 커뮤니티 질문&답변

이준호 (경소담)님의 프로필 이미지
이준호 (경소담)

작성한 질문수

[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문

vector #2

vector에서

작성

·

160

1

vector<int>::iterator it;

이거는  단순히 vector클래스에서

using iterator    = _Vector_iterator<_Scary_val>;

라고 선언 해줬기 때문에 위처럼 표현 하는게 맞나요??

간단히 비슷하게 테스트 해본결과 정말 단순히 using 선언만 클래스 안에서 해준, 그 클래스의 맴버객체로도 존재하지 않는 독립적인 클래스로 봐도 되는 건가요?

답변 1

1

Rookiss님의 프로필 이미지
Rookiss
지식공유자

문법상 using이나 typedef로 독립적인 클래스를 iterator라고 불러도 되고,
아니면 정말 vector<T> 안에 iterator라는 클래스가 정의 있어도 됩니다.
말 그대로 [vector<int> 내에 정의된 iterator라는 타입]을 사용하겠다! 라고 한 것이죠.

넵 정말 감사합니다. 근데 왜 굳이 클레스 안에 다른 클래스 이름의 정의 하는 건가요??

우리가 사용하는건 거의 vector<T> 이고 vector 헤더 안에 수많은 클래스들 등이 정의 되어 있으니 가독성 때문에 주로 사용하는 vector클래스에 정의 하는건가요???? 답변 감사합니다^^

Rookiss님의 프로필 이미지
Rookiss
지식공유자

가독성 때문은 아니고 실제 설계상 유용하기 때문입니다.
예를 들어 class Knight 안에 using Pet = Cat; 이라고 별칭을 붙여 놓으면
앞으로 Knight::Pet이라는 별칭을 이용해 Cat 객체를 만들 수 있게 됩니다.
즉 Knight::Pet pet; 이랑 Cat pet; 이랑 100% 동일한 것이죠.
만약에 추후 기획이 바뀌어 Knight의 Pet는 Dog로 바꿔치기 해야 한다고 가정할 때,
일일히 Cat pet;으로 사용했다면 해당 부분을 하나 하나 Dog pet;으로 바꿔치기 해야겠지만
using 별칭을 사용했을 경우 using Pet = Dog로만 바꿔치기 하면
모든 코드가 마법처럼 적용됩니다.

vector<T>::iterator도 마찬가지로 [vector의 반복자(iterator)]라는 별칭을 지어준 셈이죠.

이준호 (경소담)님의 프로필 이미지
이준호 (경소담)

작성한 질문수

질문하기