17/11/03 01:05:35.02 4eJ/7N9T.net
>>981 URLリンク(www.google.com)カンマ演算子
1003:デフォルトの名無しさん
17/11/03 01:56:10.83 LOXVFC/o.net
>>982
カンマ演算子か.なるほど.
whileの条件式に与えたラムダ式を評価してその成否は破棄しつつ
カンマ演算子の右にあるfinがまだ使えるかどうか,
で処理継続の可否を判断している,という理解でいいのかな.
でも,981のソースだと,while文が終わらずに,無限ループに突入しているもよう.
この現象を説明しつつ,問題を解決するソースをくれると喜びます.
1004:デフォルトの名無しさん
17/11/03 04:19:30.63 4eJ/7N9T.net
>>983 >>980
1005:デフォルトの名無しさん
17/11/03 06:53:03.34 LOXVFC/o.net
975です,
>>981 のソースでいう
while( [&]{ for( auto& e : data[i] ) fin >> e; }, fin.good() ) {
を
while( [&]{ for( auto& e : data[i] ) fin >> e; }(), fin.good() ) {
にしたら正常に動作しました.
まずはありがとうでした.
1006:デフォルトの名無しさん
17/11/03 16:37:14.49 t+2N1bPb.net
c++初心者向けの名著コードない?
1007:デフォルトの名無しさん
17/11/03 20:48:45.38 fZH3r81G.net
お前の頭は既にしてバーコードだろ?
1008:デフォルトの名無しさん
17/11/03 20:59:39.93 t+2N1bPb.net
坊主頭なんだが、ストレスで10円ハゲがたくさんできてQRコードだ。安心しろ。
1009:デフォルトの名無しさん
17/11/04 09:57:38.12 io7R91TU.net
char a[8]="12 34 56";
と言うのがあったとして
これを数値の123456にしたい時、一番速い書き方ってどんなだろうか
1010:デフォルトの名無しさん
17/11/04 10:21:35.26 KEPGzX0z.net
>>989
aの内容は書き換えても良い?
数値は必ず2桁の空白区切り?
1011:デフォルトの名無しさん
17/11/04 10:58:19.72 OnkwfBEU.net
普通に文字列の先頭から、数字が表れたら'0'との差を加算して桁上げして、ってのを繰り返すのが速いと思うが。
1012:デフォルトの名無しさん
17/11/04 11:09:08.10 XesRBOxx.net
>>989 スレッド終盤に面白い問題を出してくれるなぁ。
a[8] と要素数を明示して "12 34 56" を代入する部分に罠の臭いを感じる。
'\0' 終端の一般的なCの文字列ではない、8byte専用のトリックが存在するのかも。
1013:はちみつ餃子
17/11/04 11:29:59.70 oNhsu9lL.net
条件次第ではあるけど、
平均的には標準で用意されている関数を使うのがまともな速さになると思う。
↓こんなの
*std::remove(std::begin(a), std::end(a), ' ') = '\0';
1014:デフォルトの名無しさん
17/11/04 11:47:30.29 zGy4Oklk.net
速さってコーディンクの速さ?
実行速度?
1015:デフォルトの名無しさん
17/11/04 11:51:36.02 zGy4Oklk.net
a[0]*100000+a[1]*10000+a[3]*1000+a[4]*100+a[6]*10+a[7]-'0'*(111111)
1016:デフォルトの名無しさん
17/11/04 11:59:30.61 zGy4Oklk.net
int v = 0;
for (int i = 0 ; a[i] != '0' ; i++){
if (a[i] == ' ')
continue;
v = v*10+(a[i]-'0');
}
1017:デフォルトの名無しさん
17/11/04 12:28:06.26 io7R91TU.net
みんなありがとう
>>991を参考にこんな感じでやってみたけど、どうなんだろうか。
#include <stdio.h>
#include<time.h>
int main(){
char a[8]="12 34 56";
int b;
clock_t c c;
c=clock();
for(int d=1000000000;d;d--){
b=10*(10*(10*(10*(10*(a[0])+a[1])+a[3])+a[4])+a[6])+a[7]-5333328;
}
printf("%d\n%.3f\n",b,(double)(clock()-c)/CLOCKS_PER_SEC);
}
スマホで書いたからミスってるかもw
1018:デフォルトの名無しさん
17/11/04 16:35:05.69 NYxCuvMY.net
次スレ
【初心者歓迎】C/C++室 Ver.102【環境依存OK】
スレリンク(tech板)
1019:デフォルトの名無しさん
17/11/04 20:16:28.54 wPtyVAZ4.net
文字化けしてる奴がMZくさい
1020:はちみつ餃子
17/11/04 20:57:59.73 oNhsu9lL.net
結果を整数で得たいならこういうのでもいいかな。
std::accumulate(std::begin(a), std::end(a), 0, [](int acc, int e) { return std::isdigit(e) ? acc*10+e-'0' : acc;})
1021:1001
Over 1000 Thread.net
このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 109日 13時間 50分 32秒
1022:過去ログ ★
[過去ログ]
■ このスレッドは過去ログ倉庫に格納されています