vetor구현 질문있습니다!
319
작성한 질문수 4
vetor를 구현하는 부분에서 질문 있습니다!*연산을 위해 아래와같이 구현하신걸 보고 이해가되지 않습니다..!
for (auto i = v.begin(); i!=v.end(); ++i) {
cout << *i << "\n";
}
T& operator*() { return *_ptr}
*연산을 통해 데이터를 꺼내오는 것이면 데이터의 복사값을 반환해주는게 아닌 어떻게 T& 주소값을 반환해주는 연산이 허용되는지 해당 문법이 잘 이해가 되지 않습니다..!
답변 2
0
참조값을 반환하는 이유는 그래야 *it = 100; 같은 값으로 수정 또한 가능하기 때문입니다.
참조 문법은 외관상 복사처럼 만들어주지만, 실제 내부 동작은 포인터처럼 주소를 반환하기 때문에
원본 데이터를 건드릴 수 있게 됩니다.
0
안녕하세요, 인프런 AI인턴이에요.
vector의 구현에서 연산자*()를 통해 데이터를 가져오는 부분에 대해 궁금하신 것 같아요.
연산자*()는 포인터를 사용하는 것처럼 인스턴스를 가리키는 포인터를 반환하는 것입니다. 반환형이 T&인 이유는 반환값이 해당 인스턴스를 수정할 수 있는 참조로 반환되기 때문입니다.
그리고 반복자를 사용할 때 for문을 통해 주소 값을 차례로 이동하기 때문에 연산자*()를 사용하면 해당 주소값의 인스턴스 값이 반환됩니다.
즉, 연산자*()가 T& 포인터 참조를 반환하는 것은 해당 인스턴스를 바로 참조하여 연산하는 효율성과 수정 가능성을 높이기 위한 설계라고 할 수 있습니다.
이해에 도움이 되었는지요. 추가적인 질문 있으시면 언제든지 댓글로 남겨주세요.
소스코드와 관련하여 질문드립니다
0
70
1
map 컨테이너의 emplace 함수에 대해
0
115
2
시작이 안되네요...!
0
99
2
EAX 명령어 실행 시 RAX의 상위 32비트가 초기화 되는 이유
0
127
1
리틀 엔디안 장점 질문합니다.
0
131
1
메모리 창에 주소를 넣었는데 영어 꺠짐
0
125
1
타입변환#2 build시 knight 인접 stack이 침범당했다는 error가 발생합니다.
0
94
2
map #1 8분 58초 맵은 레드블랙트리로 이루어진 것 같습니다.
1
141
2
hello world 부터 오류 ㅠㅜ
0
190
1
지역변수가 스택? 레지스터
0
132
2
마지막 문제 질문드립니다.
0
165
2
메모리창이 비활성화됩니다.
0
98
1
이중포인터 강좌 부분 질문있습니다.
0
146
1
2를 더하는 이유
0
133
1
메모리 주소 창 엔디안 질문 드립니다. 인프런 봇 답변도 괜찮습니다
1
111
1
해당 코드는 왜 오류가 날까요?
0
156
1
마지막 문제 질문 있습니다.
0
119
1
강의 마지막부분에 질문이 있습니다.
0
192
2
Field초기화
0
141
1
virtual과 override 차이
0
315
2
3:30 참조자 리턴
0
168
1
map 찾기
0
159
1
프로그램 질문드려요
0
261
1
캐스팅 질문
0
139
1





