c++ fill()에 대해서 궁금한 부분 조사.

 

fill을 mask의 인자들에 대해서 true false를 손쉽게 설정하기 위해 사용하는 코드를 보았는데, 그래서 fill이 어디서부터 어디까지 어떤식으로 채워주는건지에 대해서 궁금해서 그에 대해서 검색해보았다. 

 

-- 이때, 'start_iterator'는 채워넣기 범위에 포함되지만, 'end_iterator'는 채워넣기 범위에 포함되지 않습니다.

따라서 위 코드에서는 'mask[7]'부터 'mask[24]'까지 'true'로 채워집니다.---

 

라는 부분이 내가 헷갈리던 부분이고 명확하게 알고있어야 할 부분이다.

그래서 fill(mask+7,mask+25,true); 형태면, 

mask+7이 시작 iterator이고, 이 건 포함이고, 

mask+25가 끝 iterator이고, 이건 미포함, 만약 이게 포함이었다면 mask[25]원소에 개별 접근하는거나 마찬가지기 때문에 out of bound이니까 runtime error가 날것이다. 

iterator에는 칸수 개념으로 옆으로 몇칸 갔다 라는 식으로 이해하면 딱 맞을것 같고, 그렇기 때문에 mask+7은 처음에서 옆으로 7칸, 즉 0에서 옆으로 7칸, 다시말해 mask[7]이 되는것이다. 

mask+25는 옆으로 25칸, mask[25]이고, 가장 끝에는 미포함이기 때문에 결국 mask[24]까지 fill로 채우는 형태가 될것이다.

mask[24]이지만 이게 결국 bool mask[25]에서 맨 마지막 원소에 해당하는 mask[24]이라는걸 헷갈리면 안된다. 

 

 

  Comments,     Trackbacks