実際に >>618のOverflowingAddAssignを用いてLendingIteratorで実装すると
以下のようになり、GATsを用いている以外は現状のIteratorともちろん同じ形
自己参照を返せるようになった点のみ異なる
impl<T: OverflowingAddAssign> LendingIterator for Fibonacci<T> {
type Item<'a> = &'a T where Self: 'a;
fn next<'a>(&'a mut self) -> Option<Self::Item<'a>> {
if self.is_overflow {
return None;
}
if self.is_first {
self.is_first = false;
} else {
self.is_overflow = self.p.overflowing_add_assign(&self.q);
std::mem::swap(&mut self.p, &mut self.q);
}
Some(&self.p)
}
}
is_first処理は >>511のコードでの「iter::once(p.clone()).chain(...」部分であり必須
また、前述のようにBigUintで用いれば is_overflow が常にfalseのため最適化で消えて、
値の更新部分は「self.p += &self.q」のみが残り非ジェネリックと同一コードとなる
したがって、上述のコードがどの型でも最善に動作するコードとなるだろう
Rust part15
■ このスレッドは過去ログ倉庫に格納されています
620デフォルトの名無しさん
2022/06/12(日) 20:59:35.22ID:nrxswUhC■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 【北区小学校火災】女性教師「電気ストーブ近くで洗濯物を乾かしていた」 失火とみて捜査 燃えた残骸に“繊維片”付着 [Ailuropoda melanoleuca★]
- 歌舞伎町の有名ホスト4人 アメリカ入国を拒否され強制送還 「君達の職業では純粋な旅行として認められないから帰れ」と言われる [muffin★]
- 「排外主義が日本全体で跋扈」村井嘉浩宮城県知事−外国ルーツの女子児童へのいじめで ★2 [蚤の市★]
- 仏南西部で44.3℃ 全土で死者40人、2歳と4歳児も犠牲に 英でも39℃予想 [首都圏の虎★]
- 【サッカーW杯】 観客285万人に到達 1試合平均は6万5000人 過去最多を大幅更新ペース [阿弥陀ヶ峰★]
- 「外国人庁」福岡市長が必要性訴え…基礎的な日本語指導がいる児童・生徒増加「全国的に問題は大きくなる」 [首都圏の虎★]
- ハム専 ★6
- ハム専 ★7
- かもめせん2
- 【地上波/DAZNほか】 FIFAワールドカップ2026 総合スレ★163【メキシコ/カナダ/アメリカ】
- 【MLB】ツインズ vs ドジャース ★3
- とらせん
- 【高市ボーナス】キオクシアの特別ボーナス、サムスンやSKハイニクスの10倍!太っ腹すぎるだろこの企業! [342017262]
- 東京都北区の小学校火災、女性教員「電気ストーブで洗濯物を乾かしていた」 [377482965]
- ケースワーカーさん若くて可愛い
- 50過ぎたら再就職ほぼ不可能
- 塩粘の靴ダサくねー?👊😅👊🏡👞
- ニートなんですけど(´・ω・`)