수색…
비고
컴파일러가 foreach를 발견하면
foreach (element; range) {
다음과 같이 내부적으로 다시 작성됩니다.
for (auto it = range; !it.empty; it.popFront()) { auto element = it.front; ... }
위의 인터페이스를 수행하는 모든 객체를 입력 범위라고하며 따라서 반복 할 수있는 유형입니다.
struct InputRange {
@property bool empty();
@property T front();
void popFront();
}
문자열과 배열은 범위입니다.
import std.stdio; void main() { auto s = "hello world"; auto a = [1, 2, 3, 4]; foreach (c; s) { write(c, "!"); // h!e!l!l!o! !w!o!r!l!d! } writeln(); foreach (x; a) { write(x * x, ", "); // 1, 4, 9, 16, } }
새로운 입력 범위 유형 만들기
InputRange
개념은 다음과 같은 세 가지 기능을 가지고 있습니다.
struct InputRange(T) { @property bool empty(); @property T front(); void popFront(); }
요컨대,
- 범위가 비어 있는지 확인하십시오.
- 현재 요소를 얻는다.
- 다음 요소로 이동
우리 자신의 타입을 InputRange
만들기 위해서는이 세가지 함수를 구현해야한다. 무한한 사각형 시퀀스를 살펴 보겠습니다.
struct SquaresRange { int cur = 1; @property bool empty() { return false; } @property int front() { return cur^^2; } void popFront() { cur++; } }
피보나치의 예를 보려면 D 둘러 보기를 참조하십시오.
Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow