우선 범위지정 for 문은 이런걸 말한다.
1 2 3 4 5 6 | int arr[] = {1,2,3,4,5}; for(int a : arr) { cout << a << endl; } | cs |
c++ 11부터 추가되었고 배열이나 stl 의 요소들을 돌아볼때(?) 쓴다.
(참고로 동적할당된 배열은 끝을 알 수 없기 때문에 그냥 돌릴 수 없음)
https://msdn.microsoft.com/ko-kr/library/jj203382.aspx?f=255&MSPPError=-2147217396
내가 만든 클래스(혹은 구조체든 뭐든)이 범위기반 for문을 쓰려면 어떻게 해야할까?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | class Test { public: int arr[10]; ... } void main() { Test test; for(int a : test.arr) { cout << a << endl; } } |
이런 식으로 쓰면 되겠지만
배열이름까지 쓰는게 번거롭다면?
만약 내가 만든 클래스안에 있는 배열이 private라면?
배열이 동적할당된 배열이라면
내가 만든 클래스안에 있는 배열의 목적은 처음부터 끝까지 도는게 아니라면?
msdn은 답을 알고 있다.
범위 기반
for
에 대한 이러한 사실을 명심하십시오:
배열을 자동으로 인식 합니다.
.begin()
및.end()
을 가진 컨테이너를 인식하십시오.기타 항목을 위해
begin()
및end()
인수 종속성 조회 사용하기.
예제가 안나와서 조금 헤매기는 했지만
간단히 예제를 만들어 보면
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | class Test { int arr[10] = { 1,2,3,4,5,6,7,8,9,0 }; int min = 3; int max = 7; public: int* begin() { return &arr[min]; } int* end() { return &arr[max]; } }; void main() { Test test; for (int a : test) { cout << a << endl; } } | cs |
이런식으로 처음과 끝 주소값을 반환하는 begin 과 end 함수를 만들어 주면 된다.
'프로그래밍 > 기타' 카테고리의 다른 글
c# 리스트를 배열로 , 배열을 리스트로~ (0) | 2018.07.12 |
---|---|
c# 리스트 합치는 법 & 중복 제거하는 법 (2) | 2017.12.17 |
벡터 회전하기 (0) | 2017.07.18 |
나사에서 아폴로발사할때 코딩 방법 (0) | 2017.06.23 |
비주얼 스튜디오 코드의 숨겨진 기능? (0) | 2017.06.18 |