사용자 정의 유형과 함께 "범위 기반 for 루프" 사용
사용자 정의 유형 통합
사용자 정의 유형에서 "범위 기반 for 루프"를 활성화하려면 다음을 구현할 수 있습니다. 다음:
네임스페이스 고려사항
반환 값 요구 사항
반환된 객체 begin() 및 end()는 실제 반복자일 필요는 없습니다. 다음 요구 사항을 충족해야 합니다.
분리된 유형
C 17에서 유형은 시작과 끝이 완료되었습니다. 분리됨. 이를 통해 끝 반복자가 시작 반복자와 다른 유형을 가질 수 있습니다. 이는 시작 반복자 유형으로 !=만 지원하는 "센티넬" 반복자에 유용하며, null로 끝나는 char 버퍼에 대한 효율적인 반복을 가능하게 합니다.
라이브러리 확장 예
도서관 유형을 고려해보세요 some_struct_you_do_not_control은 정수 벡터를 포함하지만 begin() 및 end() 메서드는 없습니다.
namespace library_ns { struct some_struct_you_do_not_control { std::vector<int> data; }; }
만들려면 이 유형은 반복 가능하므로 다음 기능을 추가할 수 있습니다. library_ns 네임스페이스:
namespace library_ns { int* begin(some_struct_you_do_not_control& x){ return x.data.data(); } int* end(some_struct_you_do_not_control& x){ return x.data.data()+x.data.size(); } int const* cbegin(some_struct_you_do_not_control const& x){ return x.data.data(); } int* cend(some_struct_you_do_not_control const& x){ return x.data.data()+x.data.size(); } int const* begin(some_struct_you_do_not_control const& x){ return cbegin(x); } int const* end(some_struct_you_do_not_control const& x){ return cend(x); } }
이제 범위 기반 for 루프를 사용하여 벡터를 반복할 수 있습니다.
library_ns::some_struct_you_do_not_control s; for (int i : s) { // ... }
사용자 정의 유형 예
귀하가 제어하는 사용자 정의 유형의 경우 유형 내에서 직접 begin() 및 end() 메소드:
struct egg_carton { std::vector<egg> eggs; auto begin() { return eggs.begin(); } auto end() { return eggs.end(); } // ... };
위 내용은 C에서 범위 기반 For 루프를 사용하여 사용자 정의 유형을 반복 가능하게 만들려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!