X



Rust part12
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
垢版 |
2021/08/24(火) 22:55:27.78ID:972JwtmU
公式
https://www.rust-lang.org/
https://blog.rust-lang.org/
https://github.com/rust-lang/rust

Web上の実行環境
https://play.rust-lang.org

日本語の情報
https://rust-jp.rs/

※Rustを学びたい人はまず最初に公式のThe Bookを読むこと
https://doc.rust-lang.org/book/

※Rustのasyncについて知りたければ「async-book」は必読
https://rust-lang.github.io/async-book/

※C++との比較は専用スレへ
C++ vs Rust
https://mevius.5ch.net/test/read.cgi/tech/1619219089/

前スレ
Rust part11
https://mevius.5ch.net/test/read.cgi/tech/1623857052/
0482デフォルトの名無しさん
垢版 |
2021/09/20(月) 22:06:55.37ID:LO5PkHvF
crates.ioのライブラリを読んでて見つけたんですが、
traitを実装するのに、まず構造体に直接同名のメソッドをimplして、
traitの実装ではそれを呼び出すだけ、みたいな方式でやられていました
Sがstruct、Tがtraitだとしてこんな感じです

impl S {
pub fn f(&self) {...}
}

impl T for S {
pub fn f(&self) { self.f(); }
}

これってimpl T for Sのほうに直接実装するのに比べて何かメリットがあるんでしょうか?
0483デフォルトの名無しさん
垢版 |
2021/09/20(月) 23:56:14.72ID:5wFYkRVK
>>480
alert()って簡易テストくらいでしか使わないような

>>481
意味が不明です

>>482
例えば今適当に作った例だけど

struct S { x: i32, y: i32, }

impl S {
 fn fmt(&self) -> String {
  format!("({}, {})", self.x, self.y)
 }
}

impl std::fmt::Display for S {
 fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
  write!(f, "S{}", self.fmt())
 }
}

fn main() {
 let s = S { x: 123, y: 456 };
 println!("{}", s.fmt()); // (123, 456)
 println!("{}", s); // S(123, 456)
}
0484デフォルトの名無しさん
垢版 |
2021/09/21(火) 03:25:03.00ID:kmDESzsF
>>482
内部用の非公開関数は
impl S { }
の方にしか書けないから実装は全部そっちに書いて
impl T for S { }
からは呼び出すだけにした方がすっきりする場合がある
0485デフォルトの名無しさん
垢版 |
2021/09/21(火) 09:21:03.28ID:asWFySWg
>>483
これ見て思ったんだけど、
メソッド名と引数全く同じだった場合で、
構造体のメソッドがpubで、
トレイトのほう優先的に呼び出したい場合ってどうするの?
そもそもメソッド名被らせるなって話ではあるんだけど
0486482
垢版 |
2021/09/21(火) 10:01:30.32ID:aEoN/PBD
すみません、impl Sもimpl T for Sもpubは付いていませんでした……
Tがpubなので、外部にはTの実装としてのfだけが見える状態ですね

>>483
振る舞いを変えたいなら分ける意味も分かるんですけど、完全に同じなんですよね

>>484
すっきりするというのは確かに読んでて思いました
実際非公開の関数が他にもありました
結局これが最大の理由なんですかね?

>>485
こんな感じでいけますね
https://play.rust-lang.org/?version=stable&;mode=debug&edition=2018&gist=10cdbd17798b14faa5fb6619ceb0739d
0487デフォルトの名無しさん
垢版 |
2021/09/21(火) 14:10:55.34ID:QKlGGi7s
気持ち悪い
0488デフォルトの名無しさん
垢版 |
2021/09/21(火) 20:13:53.65ID:jzXJ8gRI
>>473
match お前の職場にはコーディング規約がないの? {
 規約でunsafeが許されている => { ならunsafe使うの自由だろ。問題があるなら規約を改正しろ }
 規約でunsafeは禁止されているが使ってるヤツがいる => { ならなんでunsafeを利用してコーディングしてるヤツがいるんだよ。そいつをなんとかしろ }
}

結論 別に許可されてるなら自由だろ
それが問題だと思うなら上司にいって禁止させるのが先
0489デフォルトの名無しさん
垢版 |
2021/09/21(火) 20:16:09.40ID:jzXJ8gRI
おっと最後にこれが必要か

_ => { コーディング規約ぐらい決めとけ。決められてないぐらいの組織にいるなら文句いうな。諦めるか転職しろ }
0491デフォルトの名無しさん
垢版 |
2021/09/21(火) 20:43:04.95ID:aEoN/PBD
規約で禁止されていてみんな守ってる場合にコーディング規約決めろと怒られるバグ
0492デフォルトの名無しさん
垢版 |
2021/09/21(火) 20:53:30.60ID:jzXJ8gRI
>>491
規約で禁止されてるなら単純にそいつの問題だろ
それがなんで競プロの影響になるのかまったくわからんぞ
0493デフォルトの名無しさん
垢版 |
2021/09/21(火) 20:54:04.75ID:YS0x7nOl
動かないコーディング規約を作られても困るわ
どのタイミングでもいいから自動で弾く仕組みまで作らないと

…誰かgit hookの練習で作ってみない?
0494デフォルトの名無しさん
垢版 |
2021/09/21(火) 21:04:02.40ID:j1Ojj5Hg
こういうキチガイがいて邪魔だから
競プロは専用スレを立ててそこへ隔離すること
0496デフォルトの名無しさん
垢版 |
2021/09/21(火) 21:32:11.36ID:4JalLCnu
rust書いたことない障がい者が騒いでるな
ゴミコード晒して叩かれたのが相当悔しかったのか
なら自分の腕を磨けよ
やってることが数人しかいない過疎スレを荒らすって
どうやったらそう言う思考になるわけ
0498デフォルトの名無しさん
垢版 |
2021/09/22(水) 02:11:22.59ID:U1/YCban
そもそもunsafeの利用の明確な基準って決められるのか?
利用を完全に禁止することはできるかもしないが、使ってOKな条件を担当者の最良が入り込む余地がないレベルで厳密に決めるのは難しそう
0499デフォルトの名無しさん
垢版 |
2021/09/22(水) 03:25:11.12ID:+50nKS9n
>>498
例えばVecの実装にも一部unsafeが使われておりunsafeは忌避すべきものではなく有用なものであるがその使用には厳しい条件がある
@unsafeが極狭い範囲に閉じ込められており抽象化されたインターフェースによりその存在を意識せずに使えること
Aunsafeを使用することで明白にその操作の効率が良くなるもしくは低レベル操作によりその使用が避けられないこと
Bunsafeの使用部分がその関係する範囲全体の一貫性において完全に安全な操作であると確認できること
以上3点が関係者により合意確認できている場合のみunsafeの使用が認められそして上位ではその存在を気にせず安全に使うことができる
0501デフォルトの名無しさん
垢版 |
2021/09/22(水) 07:58:09.34ID:5QejlQFf
使わざるを得ないパターンを提示(この時点で滅多に無い事が分かる)、当てはまらない物は原則禁止
本来要らない箇所で使おうとする輩が湧いて出ないようにするのが目的
0502デフォルトの名無しさん
垢版 |
2021/09/22(水) 10:40:17.54ID:88WbS542
ノーコメントunsafeは問答無用で禁止くらいのことはしてもいいと思う
そのくらいunsafeはやばい
0503デフォルトの名無しさん
垢版 |
2021/09/22(水) 11:36:51.20ID:Gy06LVHu
stdのunsafe APIに関してはそうだと思うけど
crates.ioのライブラリ群にまでそういうの持ち出されると面倒だなあ
0505デフォルトの名無しさん
垢版 |
2021/09/22(水) 12:31:35.55ID:aOvfflz7
競プロの人ってレギュレーション守れば何してもいいって考え方の人が多いよね。
規約次第ってのが正にそれ。

unsafe みたいに取り扱いが繊細な機能は基本使わない、使う時には議論した上で限定的に使うみたいな感じに取り扱うのがほとんどだろ。
規約で機械的には決められないと思うよ。
0507デフォルトの名無しさん
垢版 |
2021/09/22(水) 13:53:44.01ID:HlHaH6ql
久々にusize祭りキタ━━━━(゚∀゚)━━━━!!

unsafe fn calc(bit: i32) -> i32 {
 if bit == 0 { return 0; };
 if DP[bit as usize] != -1 { return DP[bit as usize]; };

 let mut start_id: i32 = 0;
 for i in 1..=K_NUM { if bit & 1 << i == 0 { start_id += C_NUM[i]; }; }

 let mut res: i32 = i32::MAX;
 for i in 1..=K_NUM as i32 {
  if bit & 1 << i > 0 {
   let mut end_id: i32 = start_id + C_NUM[i as usize];
   let mut num: i32 = end_id - start_id - (SUM[end_id as usize][i as usize] - SUM[start_id as usize][i as usize]);
   res = res.min(calc(bit ^ 1 << i) + num);
  }
 }
 DP[bit as usize] = res;
 res
}
0512デフォルトの名無しさん
垢版 |
2021/09/22(水) 20:53:41.87ID:HlHaH6ql
>>509
それはRustだけでなくcやc++でも起こることなので、注意すれば大丈夫ヽ(´ー`)ノ
Rustだから駄目、c++ならokという根拠にはならないから
0515デフォルトの名無しさん
垢版 |
2021/09/23(木) 00:15:25.31ID:r4yNqkwu
規約になんもないからってunsafeまみれだとぶっ叩かれるぞ
そう、actix-webの作者のように
0516デフォルトの名無しさん
垢版 |
2021/09/23(木) 00:24:58.81ID:Pncl1K/q
>>507 添削しました。お収めくださいまし。

1. 安易にグローバル変数を使うな。状態を引数で持つくらいやれ
2. 引数bitが負になるのかくらい考えろ。脳死でi32とusizeをコピペしてるだろテメー
 暗黙のキャストが無い==明示的にキャストすればいい、じゃねえぞ
 パッと見て汚いなら設計が汚えんだ。動的プログラミングだから汚えんじゃねえ、テメーが汚えんだ
 …負数になる可能性がある場所はたったの1行じゃねえか!どうした?頭使ってる?
4. unsafe外す努力もしねえのか、どうした?5回deleteキー押せば外れるぞ?
5. 値とインデックスが混ざるような書き方、どうして怖がらない?ロボトミー手術でも受けたのか?
6. C/C++には無い機能も使わず、warningもlinterも無視して、一体どうしてrustで書いてるんだ?
 勉強中とすら言えねえじゃねえか。
 まさか、VBAスクリプトを.javaファイルにコピペして「動きません!javaはクソ!」とか言っちゃう伝説のコーダーなのか?
0517デフォルトの名無しさん
垢版 |
2021/09/23(木) 01:13:45.47ID:X5xfUo6W
質問です
デフォルト値を与えるトレイトDefaultについて例えば
#[derive(Default)]
struct S { a: i32, b: i32, c: i32 } の時に
let s = S::default(); と書いても同じ結果で短いのに
let s: S = Default::default(); と書くのはDefaultトレイトのdefault()だと明示するためでしょうか?
結局deriveすると
impl Default for S {
 fn default() -> Self {
  S { a: 0, b: 0, c: 0 }
 }
} を自動的に定義してくれるという理解であっていますか?
驚いたのは
let s = S { b: 123, ..Default:default() };
とすると残りフィールドをデフォルト値展開してくれて S { a: 0, b: 123, c: 0 } が得られることでした
そこでderiveを使わずに自分で
impl Default for S {
 fn default() -> Self {
  S { ..Default::default() }
 }
}
と手動かつ内部をDefault::default()に任せてみたところ
再帰しているとコンパイルで警告が出て実行するとコアダンプでしたw
なぜ?
0518デフォルトの名無しさん
垢版 |
2021/09/23(木) 01:38:10.01ID:pkzlOfob
>>517
Default::defaultはどこでも使えるから癖で使ってる人が多いんだと思う

S { b:123, ..Default::default() }は残りのフィールドを展開するというより、
S::default()の所有権を奪ってbだけ書き換えたものを返すという理解が正しい
, ..に続くのは構築しようとしているものと同じ型の値
例えばS { a: 123, ..s }のようにも書ける
, ..Default::default()と書けばSが期待される箇所なので, ..S::default()と同様になる

以上を踏まえれば最後のコアダンプの原因はS::defaultの無限再帰によるstack overflowだと容易に理解いただけよう
0519デフォルトの名無しさん
垢版 |
2021/09/23(木) 02:02:07.87ID:X5xfUo6W
>>518
なるほど!よく考えれば
let base = S { a: 0, b: 0, c: 0 };
let s = S { b: 123, ..base }; の時と同じstruct base式の構文だったのですね
結局、以下のように自分で展開したところ(当たり前ですが)上手く行きました
impl Default for S {
 fn default() -> Self {
  Self {
    a: Default::default(),
    b: Default::default(),
    c: Default::default(),
  }
 }
}
0520デフォルトの名無しさん
垢版 |
2021/09/23(木) 07:42:33.86ID:WWdZV+h/
Defaultトレイトのdefaultと明示するため、で合ってるよ
Arc::cloneにもそのような文化がある
0522デフォルトの名無しさん
垢版 |
2021/09/23(木) 13:01:19.66ID:4xQQttIg
まあ、100%良いものなんてないんだし、子供達がせっかく作ったものを評価し、使ってやるというのも、年長者の優しさってものだろう。

今までどれだけ色々な言語が作られ、流行る、主流になると言われては下火になっていったことかと思えば、Rustもまたいずれ他のものにとってかわられるのが世の流れではあるだろうが、それならそれで良いじゃないか。

諸行無常
0523デフォルトの名無しさん
垢版 |
2021/09/23(木) 13:12:55.93ID:+msTnWug
>>522
Rustを置き換えるにはコンパイル時点でのメモリ安全性保証を実現しないといけない
Rustは諸問題を解決してしまったので代わりの言語は数十年出てきそうにない
もし出てきたときには手続き型ではなくなってるだろう
0528デフォルトの名無しさん
垢版 |
2021/09/23(木) 17:14:42.14ID:pKS1sRJG
昔の 1% は (注意を払うという対処法で) なんとかなったが現代のコード規模の 1% は深刻だという話なんだよ。
0530デフォルトの名無しさん
垢版 |
2021/09/23(木) 18:01:26.98ID:j+XImBaS
usize祭りコネ━━━━(゚д゚;)━━━━!!

let mut dp = vec![i32::MAX; n_list.len() + 1];
for &i in &n_list {
 for j in 0..dp.len() {
  if dp[j] > i {
   dp[j] = i;
   break;
  }
 }
}
let mut cnt = n - dp.iter().filter(|&x| x != &i32::MAX).count();
0531デフォルトの名無しさん
垢版 |
2021/09/23(木) 18:27:08.03ID:3ZM+sTU9
vscodeでセーブした時に、ifに付けちゃった括弧を外して欲しいんだけど、何をどう設定すればいいの?
0532デフォルトの名無しさん
垢版 |
2021/09/23(木) 18:28:49.30ID:l8duufjf
処理系の勉強をかねてRustで
ttps://www.sigbus.info/compilerbook
これをやってみようと思う
序盤で二分木&再帰・・・うへー
0533ハノン ◆QZaw55cn4c
垢版 |
2021/09/23(木) 18:32:58.93ID:HaJtCNmP
>>532
二分木はむしろ非再帰で組めといわれたら罰ゲームなんですよ‥‥
0534デフォルトの名無しさん
垢版 |
2021/09/23(木) 19:12:11.01ID:+qAUZiId
なんかこのスレ競プロの厄介な人に乗っ取られた?
クソコードを延々と貼り付けてるあたり開き直ったか
0535デフォルトの名無しさん
垢版 |
2021/09/23(木) 19:15:36.83ID:+msTnWug
競プロは別スレ建てて分離しましょう
競プロの件はいずれもRustを利用&学習する人々にとって役に立たない有害なものばかりでこのスレと別件ですから
0537デフォルトの名無しさん
垢版 |
2021/09/23(木) 19:48:26.70ID:j+XImBaS
>>535
いやRustで競プロをする人もいるじゃんね
Rustを使用している人は、仕事だけの人、競プロだけの人、仕事でも競プロで使う人、のそれぞれの合計

ということは、そこから競プロを排除するってことは、より少ない人数だけを対象にするスレを立てるってことだから、
競プロの話題を禁止したい人が、「Rust原理主義者スレ」とでもして、自分たちが別スレをたてて
原理主義者たちだけで移動するのが論理的かつ合理的ヽ(´ー`)ノ
0539デフォルトの名無しさん
垢版 |
2021/09/23(木) 20:06:06.82ID:pkzlOfob
>>537
あなたはまず何の説明も無しにコード貼り散らかして祭りだとか言うことの目的を教えなさいよ
0540デフォルトの名無しさん
垢版 |
2021/09/23(木) 20:19:26.28ID:O5HtXMYP
ブログトップにキモい自撮り写真貼ってるやつを見てから
競プロ臭のくっさいコードはスルーすることに決めてる
0541デフォルトの名無しさん
垢版 |
2021/09/23(木) 20:34:50.85ID:j+XImBaS
>>538-540
スレッドは知識の集合知である場所だと思うから、
B木を考えても、情報が細分化される場合には、
携わる人数(情報)が少ないほうを葉にするのが妥当だと思うけど

>>539
Rustにはメリットもあるし、デメリットもある
様々な側面から、こういうことがあり得るとか、こういうこともできるとか
そういう情報がプラスになるんじゃないかと思っている

仕事のみの人にとっては競プロの書き方は我流だと思うだろうし、
競プロでも書いている人は、別に仕事で競プロの書き方はしてないが
直感的にやりたいことができないこともあるという思いもある

そのあたりの折り合いを付けるのが正しいRustスレなんだと思うんだよね。個人的に。
だから競プロ以外の話をしたいなら、原理主義スレを立てればいいし、
競プロだけの話をしたいなら、競プロスレを立てればいい。

ただし、ここはRustのrootだと解釈している
0544デフォルトの名無しさん
垢版 |
2021/09/23(木) 22:22:06.57ID:WWdZV+h/
俺はお前が嫌い
0545デフォルトの名無しさん
垢版 |
2021/09/23(木) 22:56:16.76ID:pkzlOfob
>>541
要はフィードバックが欲しくてソース貼ってるのか?
ならせめて入力仕様と出力仕様くらいは書こうな
競プロなら問題へのリンクでもいい
0547デフォルトの名無しさん
垢版 |
2021/09/24(金) 00:59:53.09ID:HPu5FO6/
>>541 添削しました。お納めください。

1. Cをそのままコピペしただけじゃねえか
  Rustの機能を試すだぁ?enumもtraitもパターンマッチも使えないのに何が検証だ馬鹿野郎
  「Cコピペしたけどメリット無いね!」って後何回繰り返すんだ?
2. なんだこの察してちゃんなコードは。保育園にいるつもりか?
  意図の明確なコードが1行も無いんだが?
3. お前がここにゴミを貼る妥当性が一つも無い
  Rustの世界に持ってきた概念のどれも使わないで、何が検証できると思ってるんだ?
  例えるなら「ひらがなしか知らない外国人が日本語の良し悪しを検証します!」っていうもんだぞ
  誰がマトモに付き合うんだ?
0548デフォルトの名無しさん
垢版 |
2021/09/24(金) 01:50:08.20ID:Dee2NcuI
>>529
CやC++だと非安全コードはどこにでも現れる可能性があるので100%のコードを人力で確認する必要があったが
rustでは安全性に関してはunsafeな部分のみ(例えば全体の1%)を確認すれば良いという話では
静的チェックで100%なんとかしようという話はしていないと思うが
0549デフォルトの名無しさん
垢版 |
2021/09/24(金) 02:35:54.11ID:Bn8yEU3N
そうだなーと思う反面unsafeだらけのコードを目の前にしてげんなりする未来も見えるという…
0550デフォルトの名無しさん
垢版 |
2021/09/24(金) 04:43:03.82ID:ow12Eod1
ほとんどの用途でunsafeを直接使うことは無いんじゃない?
グローバル変数はOnceCellで解決してしまったし
もし生ポ操作するとしたら新たな型を作ってその中に閉じ込める
0551デフォルトの名無しさん
垢版 |
2021/09/24(金) 08:02:15.31ID:ljIO2QUf
そういうコードが書ける事が問題だとあれほど批判してたのに
0552デフォルトの名無しさん
垢版 |
2021/09/24(金) 08:30:26.85ID:ow12Eod1
>>551
それは何も問題ではないよ
例えばVec型もpushやpopですら内部はunsafe利用だけど我々はそれを知らず気にせず安全に使うことができる
0556デフォルトの名無しさん
垢版 |
2021/09/24(金) 19:03:51.27ID:clPGC+m8
機能性で言えば競プロに必要なものは大抵の言語が備えてるだろうし
使いやすさで言えばRustはきっちり書くことを求められてるから素早く書くのには向いてないし
それでも敢えてRustを選ぶ理由は趣味や慣れくらいなのでは
0557デフォルトの名無しさん
垢版 |
2021/09/24(金) 21:51:28.01ID:73j3AhJA
releaseビルドするとTrojan:Script/Wacatac.B!mlを検出して
Windows Defenderに怒られる
--release付けないと大丈夫
誤検知かな?
0558デフォルトの名無しさん
垢版 |
2021/09/24(金) 22:12:48.28ID:ow12Eod1
>>553
ごめん
例えばUnsafeCellの存在はRustの借用ルールに制約されることなく自由に新たな型を設計して作る道を開いているけど
あくまでも安全な型を作るための素材であって具体的にはRefCellやOnceCellなどの様々な安全な型を提供する素材となっているように
unsafeの存在も上位レベルで安全な関数やモジュールを提供するための素材としてのみ用いるべきではないか
ということを伝えたかったのです
0559デフォルトの名無しさん
垢版 |
2021/09/24(金) 23:54:29.51ID:561kcuCK
つまり競プロ君のunsafeの使い方はただ危ない逸脱のみであり、
安全かつ便利な何かを提供する目的のための使い方ではなく、
Rustの精神に反している、と。
したがって競プロの話は、
このRust本スレでやるべきことではなく、
ここでは禁じて別スレでやるべき、と。
0561デフォルトの名無しさん
垢版 |
2021/09/25(土) 01:22:46.71ID:HzR9ZlyY
Rustの精神とかそんな大層な話でもないでしょ
建設的に話せない奴に付き合う必要はないというだけ
0562デフォルトの名無しさん
垢版 |
2021/09/25(土) 03:09:21.77ID:r08K7R9X
>>558
違う人が書いた事を、さも自分が書いたように返答するのはどうかと思う
0563デフォルトの名無しさん
垢版 |
2021/09/25(土) 08:30:11.81ID:0L4s8Q79
>>562
え??
>>558は自分の意見を書いただけでこのスレにしか書いていないし参考にしたサイトや書き込みもないよ
もし偶然にそっくりな内容なものがどこか他にあるなら見てみたいので教えて
0565デフォルトの名無しさん
垢版 |
2021/09/26(日) 00:09:45.69ID:EgHC/Y9j
Range関連での質問です

(Included(&x), Included(&y)) はx..=yと書けますが、
(Excluded(&x), Included(&y)) を似たように書く方法ってありますか?
0567デフォルトの名無しさん
垢版 |
2021/09/26(日) 01:56:26.69ID:wsLZ/M6d
Range はよく使うから構文糖を入れてちょっと簡単にするという判断がうまれたんだと思うんで、
それほど頻出しないパターンは明示的に書くしかしょうがないと思う。
自分のプログラムでよく使うのであればそういう関数を用意しておけというくらいの妥協になる。
0568デフォルトの名無しさん
垢版 |
2021/09/26(日) 03:07:15.60ID:RXeC0HEE
>>565
range式も魔法があるわけではなく
それぞれ対応する構造体があって各traitなどを実装してるだけなのですが
stdにあるのは以下の6種類のみですね
assert_eq!(.., std::ops::RangeFull);
assert_eq!(3.., std::ops::RangeFrom { start: 3 });
assert_eq!(..7, std::ops::RangeTo { end: 7 });
assert_eq!(..=7, std::ops::RangeToInclusive { end: 7 });
assert_eq!(3..7, std::ops::Range { start: 3, end: 7 });
assert_eq!(3..=7, std::ops::RangeInclusive::new(3, 7));
例えば開始点のあるRangeFrom・Range・RangeInclusiveはIteratorも実装

一方でその(Excluded(&x), Included(&y))形式すなわち
(Bound<T>, Bound<T>)および(Bound<&'a T>, Bound<&'a T>)型だと
実装されているのはRangeBoundsトレイトのみでIteratorトレイトなどは無いという違いがあるようです
開始がUnboundedだと意味がないからでしょう
つまりイテレータで回したい時にはこの形式では使えないので
(Excluded(x), Included(y)) は (x+1)..=y と書くしかないと思います
もちろんSkip構造体のコストを払って(x..=y).skip(1)もアリです
0569デフォルトの名無しさん
垢版 |
2021/09/26(日) 03:55:02.75ID:EgHC/Y9j
>>566 >>568
すみません、言葉足らずでした
BTreeMap/Setのrangeメソッドに渡す引数を意図していました
こちらに渡すのはイテレータではないのでskip(1)はできないようです

>>567 >>568
あまり頻出ではないですし仕方ないですかね
実際困るわけではないのですが、
アンバランスなので気になってしまいました
0570デフォルトの名無しさん
垢版 |
2021/09/29(水) 09:06:12.26ID:W9rNFdvq
無職の人工衛星おじさん来て
0576デフォルトの名無しさん
垢版 |
2021/10/01(金) 14:33:36.85ID:2Q9z0ScR
そりゃ普段の作業はGitHub上でやって、まとまったところでパッチ投げるんだから
LKMLで日々の進捗報告なんかしたら迷惑でしかない
0578デフォルトの名無しさん
垢版 |
2021/10/01(金) 15:23:00.24ID:25/eRB6c
いや実際のドライバーが動かないのにごねてるだけやん。。話になってないんだが。
0579デフォルトの名無しさん
垢版 |
2021/10/01(金) 23:00:07.65ID:CSO4Qyhi
as usize祭りの回避ができてきてる━━━━(゚∀゚)━━━━!!

let mut heap: BinaryHeap<Reverse<(usize, usize)>> = BinaryHeap::new();
heap.push(Reverse((0, 0)));

while let Some(Reverse((_, now))) = heap.pop() {
 let mut que: VecDeque<(usize, usize)> = VecDeque::new();
 que.push_back((now, 0));
 while let Some((next, cnt)) = que.pop_front() {
  if cnt == price[now].1 { break; };
  for &i in &list[next] {
   if total[i] > total[now] + price[now].0 {
    total[i] = total[now] + price[now].0;
    heap.push(Reverse((total[i], i)));
   }
   que.push_back((i, cnt + 1));
  }
 }
}
0581デフォルトの名無しさん
垢版 |
2021/10/02(土) 07:25:57.30ID:VZaTbxB/
VSCodeか何かで、編集中のファイルを(保存する度ではなく)リアルタイムで構文チェックしてもらうことってできないの?
目が悪いもので、C#みたいに間違えたら即指摘みたいなのがすごく助かるんだけど・・・・
■ このスレッドは過去ログ倉庫に格納されています

ニューススポーツなんでも実況