• 카테고리

    질문 & 답변
  • 세부 분야

    게임 프로그래밍

  • 해결 여부

    미해결

vector에서

21.05.12 00:27 작성 조회수 118

1

vector<int>::iterator it;

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

using iterator    = _Vector_iterator<_Scary_val>;

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

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

답변 1

답변을 작성해보세요.

1

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

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

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

가독성 때문은 아니고 실제 설계상 유용하기 때문입니다.
예를 들어 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)]라는 별칭을 지어준 셈이죠.