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

firdoo님의 프로필 이미지
firdoo

작성한 질문수

10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트

1-K

1-K

작성

·

237

1

다른분들의 답변, 교안을 봐도 이해가 가지 않아서 질문드립니다.

if(mid)ret.insert(ret.begin() + ret.size() / 2, mid);

 

위 부분에서 ret.begin()이 들어가야하는 이유를 모르겠습니다.

교안을 보면 insert(위치, 문자열)이라고 되어있으니까 insert(ret.size()/2 , mid)라고 하면 되지 않나요?

왜 ret.begin()을 빼면 오류가 나는지

다른 분들의 답변을 봐도, 오래 고민을 해봐도 도무지 이해가 가지 않아 답답한 마음에 질문드립니다ㅠㅠ

답변 1

1

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

안녕하세요 firdoo님 ㅎㅎ

해당 자료구조의 시작값을 나타내는 것이 begin()입니다.

ret.size()는 그저 크기일뿐입니다.

insert()는 어떤 자료구조의 "어떤 위치"에서 어떤 값을 집어넣는 함수입니다.

즉, 어떤 위치가 중요합니다.

여기서 저 위치. 즉, 해당 자료구조의 첫 시작지점을 나타내는 게 begin()입니다.

예를 들어메모리상

10 11 12 13 ... 이런 주소가 있는데 vector<int> v라는 자료구조가 12부터 메모리를 쓴다고 가정하면

12가 begin()이 됩니다.

여기서 이 vector의 두번째 부분에다가 뭔가를 삽입하고 싶다면 해당 자료구조의 첫 주소 12번째 메모리주소 + "두번째를 나타내는 크기"를 기반으로 삽입해야 하는 것이죠.

 

 

또 질문 있으시면 언제든지 질문 부탁드립니다.

좋은 수강평과 별점 5점은 제가 큰 힘이 됩니다. :)

감사합니다.

강사 큰돌 올림.

firdoo님의 프로필 이미지
firdoo

작성한 질문수

질문하기