...ing logging 4.0

はてなブログに移行しました。D言語の話とかいろいろ。

Range - dmd2.029

import std.stdio : writeln;
import std.random : Mt19937;
import std.algorithm : advance;
import std.range : front, popFront;

void main()
{
	{
		int[] arr = [5,4,3,2,1];
		writeln(arr.front);//5
		arr.popFront;
		writeln(arr.front);//4
		arr.popFront;
		writeln(arr.front);//3
	}
	writeln("---");
	{
		int[] arr = [5,4,3,2,1];
		advance(arr, 2);   //最初の2つを飛ばす
		writeln(arr.front);//3
		arr.popFront;
		writeln(arr.front);//2
		arr.popFront;
		writeln(arr.front);//1
	}
	writeln("---");
	{
		Mt19937 gen;
		writeln(gen.front);//(a)
		gen.popFront;
		writeln(gen.front);//(b)
		gen.popFront;
		writeln(gen.front);//(c)
	}
	writeln("---");
	{
		Mt19937 gen;
		advance(gen, 2);   //最初の2つを飛ばす?
		writeln(gen.front);//(c)
		gen.popFront;
		writeln(gen.front);//(d)
		gen.popFront;
		writeln(gen.front);//(e)
	}
}

advance(arr, 2); と advance(gen, 2); の挙動が違う.なんで?

5
4
3

    • -

3
2
1

    • -

581869302
3890346734
3586334585

    • -

3890346734
3586334585
545404204