- 279 名前:デフォルトの名無しさん mailto:sage [2022/03/26(土) 20:52:37.86 ID:Vz8Iz6e1.net]
- >>263
Vecを受けてVecを返すインタフェースに通常することはない 普通は以下のようにする (1) 同じVecを返す場合 (=書き換えたい場合) まずこの場合はVec<T>自体を渡さなくても参照を渡せば済む 書き換えるから&mut Vec<T>を渡せばいいように思うが 普通はスライス&mut [T]を渡すインタフェースにする なぜならVecの書き換え参照を渡すとVecの書き換えしかできないが スライスの書き換え参照を渡せばVecの途中一部の書き換えもできるし 配列や配列の途中一部の書き換えもできるからである (2) 別のVecを返す場合 (=引数側のVecのデータから作り出したい場合) この場合も同様となる 引数としてVec<T>を渡すのではなくスライス共有参照&[T]を引数にする これで入力データがVecだけでなく配列やそれらの一部でも受け付けることが可能 (2)' (2)のケースで入力を順次アクセスのみする場合 この場合は入力としてイテレータを受け付けられると良い場合がある なぜならイテレータはVecのようなメモリ領域を必要としないため有利 イテレータを入力とする場合のインタフェースは更に2通りに分かれる [a] イテレータのメソッドとしてしまう イテレータチェーンに組み込むことができて便利 ただしVecや配列やスライスに適用する時はinput.iter().method()の形になる [b] 引数として IntoIterator<Item=T> を受け付ける これだと引数に直接スライス、配列、Vec、イテレータのどれも渡せて便利 ただしイテレータチェーンに組み込むことはできない イテレータメソッドの2つ目の入力インタフェースとしても使われる どちらの場合でも順次出力でない場合ならばVecを返すのもありだが 順次出力ならばイテレータを返したほうがイテレータチェーンに組み込めて有利 なぜなら中間生成Vecを無駄に返さずに済むからである この場合にVecが欲しければcollect()すればよい
|

|