D言語3(配列1,Range)
std.arrayを用いない,至って普通の配列
import std.stdio; int main() { int[] arr=[100,200,300]; for(uint i;i<arr.length;i++) writeln(arr[i]); return 0; }
出力結果
100 200 300
Rangeについて
前回の記事でも書いたD言語基礎文法最速マスターでも出てきているRangeがいまいち分からない.D言語友の会というサイトには
レンジは一般にコンテナと呼ばれる、内部に複数のデータを保有するようなオブジェクトが、特定のメンバ関数やプロパティを実装することで統一的に操作できる仕組みを提供します。
http://dusers.dip.jp/modules/wiki/?Other%2FRange%E3%81%BE%E3%81%A8%E3%82%81
と書いてある.コンテナというと直ぐC/C++のSTLにあるalgorithmを思い出すのだけれど,ある意味でそう考えて良いのかもしれない.前述したD言語基礎文法最速マスターには,4. 配列 の 配列の操作 に,
と書いてあるし,本質は理解しきれていない.昔(2年前)Cを習ったときに見た //おまじない みたいなもの,という認識になっている.
では本題に.なぜここでRangeかというと,std.arrayを用いることでRangeを利用することができる,らしい.少し読んでみると,".front"とか".popFront()"とか,どっかで見たような挙動をしている.これらの命令文の一部(insertとか)にRangeが使われているからさっきの文を読んでいた.
import std.stdio; import std.array; int main() { ///型推測でint型配列を宣言 auto arr =[1,2,3]; ///aに対し,arrの最初の要素を代入 auto a = arr.front; ///aを出力 writeln(a); ///arrの最初の要素を排除 arr.popFront(); ///bに対してarrの末尾を取得 auto b = arr.back; bを出力 writeln(b); ///arrの末尾を削除 arr.popBack(); arrの末尾に要素を追加 arr ~= 4; return 0; }
出力結果
1 3