1 名前:デフォルトの名無しさん mailto:sage [2007/12/08(土) 14:09:22 ] エスケープシーケンスやWin32APIなどの環境依存なものでもOK。 ただしその場合、質問者は必ず環境を書きましょう。 ※sage禁止です(と代々スレに書いてありますが自己判断で)。 【前スレ】 【初心者歓迎】C/C++室 Ver.44【環境依存OK】 pc11.2ch.net/test/read.cgi/tech/1194016813/ 【アップローダー】(質問が長い時はココ使うと便利) kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm
161 名前:デフォルトの名無しさん mailto:sage [2007/12/11(火) 05:26:29 ] すんません ×ただ、この様な構造体をは@、Aの方法で初期化できると思うのですが ○この様な構造体をは@、Aの方法で初期化できると思うのですが
162 名前:デフォルトの名無しさん mailto:sage [2007/12/11(火) 05:41:17 ] >>160 いまいちわからん まだ関数の初期化などという話が続いてるのかな? class Fooで包んでる意味がわからないけど、 とりあえず括弧の対応など幾つか修正した #include <string> using namespace std; class Foo { public: struct st_data { st_data(int n, string s, double db) : yymmdd( n ), code( s ), value( db ){} //@ int yymmdd; string code; double value; //st_data() : yymmdd( 0 ), code(""), value( 0.0 ){} //A }; Foo(); ~Foo(); }; int main() { Foo::st_data(0, "", 0); return 0; } これで1の方法で初期化できるけど…何を求めてるかがわからんので適当だ
163 名前:デフォルトの名無しさん mailto:sage [2007/12/11(火) 09:07:45 ] FindNextFileの読み込み順序は制御できますか?
164 名前:デフォルトの名無しさん mailto:sage [2007/12/11(火) 09:12:44 ] >>160 Cは分かるという話だから、何か簡単な勘違いをしているのだと思うけど、 そのエラーの原因はtypedef C言語でも、typedefしただけじゃ使えないでしょ? 変数を宣言しないと。 今回はそもそも再利用しないのでtypedefしなくてもいいから struct hoge { ... } hage; て形でいいと思うけど。
165 名前:デフォルトの名無しさん mailto:sage [2007/12/11(火) 09:31:12 ] >>160 >error C2512: 'st_data' : クラス、構造体、共用体に既定のコンストラクタがありません。 コレって、引数を持つコンストラクタしかないクラス(等)に対して、 引数をつけずにコンストラクタを呼んだ時に見かける。 Foo::st_data data; とかで変数定義すると、引数の無いコンストラクタ呼び出そうとするけど、 どっかにそんな記述してない?
166 名前:デフォルトの名無しさん mailto:sage [2007/12/11(火) 09:44:01 ] ソートのアルゴリズムなのですが、 for(sorted=0; sorted < N-1; sorted++){ insert = sort[sorted+1]; for(i=0; i<=sorted; i++) if(sort[i]>insert) break; while(i<=sorted+1){ temp=sort[i]; sort[i]=insert; insert=temp; i++; }}} for(i=0; i<=sorted; i++) if(sort[i]>insert) break; の部分が理解できません。 これは、if(sort[i]>insert)をfor(i=0; i<=sorted; i++)で繰り返すのはよしとして、 if(sort[i]>insert)が真の時にbreakして、whileに処理が飛ぶのでしょうか? そして、ifが偽のときはどこに処理が飛ぶのでしょうか?
167 名前:デフォルトの名無しさん mailto:sage [2007/12/11(火) 10:01:41 ] sort配列の中で、insertよりも大きい値の位置「i」を探している 繰り返し中一度も真にならなければ「i」はsorted+1(最後)になる
168 名前:デフォルトの名無しさん mailto:sage [2007/12/11(火) 12:08:25 ] >>163 ttp://msdn2.microsoft.com/en-us/library/aa364428.aspx >The order in which the search returns the files, such as alphabetical order, is not guaranteed, and is dependent on the file system. >You cannot depend on any specific ordering behavior. >If the data must be sorted, you must do the ordering yourself after obtaining all the results.
169 名前:164 mailto:sage [2007/12/11(火) 12:23:53 ] すまん俺のは忘れてくれ
170 名前:デフォルトの名無しさん mailto:sage [2007/12/11(火) 13:20:32 ] vector <string> str; をディスクに保存したいのですがどの用にしたら良いんでしょうか?
171 名前:デフォルトの名無しさん mailto:sage [2007/12/11(火) 13:31:24 ] どうにでも出来すぎて、どう答えたもんかわからんな。何か制約はあるの? たとえば、stringの中身に改行が無いことがわかっているなら、大雑把に一行一要素ずつ出力していって 読み出すときはこれまた大雑把にstd::getline()で読み出していけばいいし、 そうでないなら、stringのサイズと中身を順に詰めていって、読み出す時は サイズを読む→その分だけデータを読む、を繰り返していけばいい。 ファイルの開き方がわからないとか、そういうレベルなら「ファイルストリーム」とかで検索して勉強しる。
172 名前:デフォルトの名無しさん mailto:sage [2007/12/11(火) 13:33:12 ] すみません string型にバイナリデータは読み込めませんか? char buf[1000];として bufに100バイト読み込んだとして、(string)bufと変換するしか無いですか? vector <string> str;の構造自体をバイナリで記録できれば変換必要ないと思うんですが・・・無理ですよね?
173 名前:デフォルトの名無しさん mailto:sage [2007/12/11(火) 13:35:54 ] >>171 すみません なるべ読み書きの速度を上げたいんですが・・・ 行単位での書き込みは、もし1000万行とかになったら時間コストがかかりすぎますよね バイナリで一度に5メガずつとか読み込んで速度を上げたいです
174 名前:デフォルトの名無しさん mailto:sage [2007/12/11(火) 13:39:49 ] stringのアドレスからどの様にデータが配置されているか判れば、直接バイナリで読み書きできそうですが・・・ size()以外の情報データは何ビットか判りますか?
175 名前:デフォルトの名無しさん mailto:sage [2007/12/11(火) 13:44:33 ] >>173 >>171 が >stringのサイズと中身を順に詰めていって、読み出す時は >サイズを読む→その分だけデータを読む、を繰り返していけばいい。 と書いてるじゃないか
176 名前:デフォルトの名無しさん mailto:sage [2007/12/11(火) 13:45:33 ] >>174 stringは可変長領域へのポインタを持っているだけだろうからその方法じゃ無理
177 名前:デフォルトの名無しさん mailto:sage [2007/12/11(火) 13:46:29 ] char配列経由しないでstringに格納する方法は有りますか?
178 名前:デフォルトの名無しさん mailto:sage [2007/12/11(火) 13:49:08 ] >>177 何をどこから格納するの?
179 名前:177 mailto:sage [2007/12/11(火) 14:04:14 ] たとえばdoubleならIEEE型のバイナリを8バイトずつディスクに書き込めるじゃないですか stringもバイナリで読み書きできない物かと
180 名前:デフォルトの名無しさん mailto:sage [2007/12/11(火) 14:06:13 ] >>179 c_str()を使うといいよ
181 名前:デフォルトの名無しさん mailto:sage [2007/12/11(火) 14:06:27 ] 自前でchar配列を管理した方が読み書きは速そうですね
182 名前:179 mailto:sage [2007/12/11(火) 14:07:46 ] 書き込むときは良いんですけど、読みこみがchar配列から変換する必要がでてしまいます
183 名前:180 mailto:sage [2007/12/11(火) 14:08:12 ] ごめん間違えた忘れて
184 名前:デフォルトの名無しさん mailto:sage [2007/12/11(火) 14:08:32 ] あらかじめresizeしてから格納すればよいのでは?
185 名前:デフォルトの名無しさん mailto:sage [2007/12/11(火) 14:10:06 ] リサイズで領域確保すればバイナリで読み込めますか?
186 名前:デフォルトの名無しさん mailto:sage [2007/12/11(火) 14:12:11 ] 試せ
187 名前:デフォルトの名無しさん mailto:sage [2007/12/11(火) 14:14:06 ] 速度を気にしてるようだけど、実測した上で言ってるの? そもそもデータ構造はvector<string>でいいの? 要求を満たす代替案は考えてないの?
188 名前:デフォルトの名無しさん mailto:sage [2007/12/11(火) 14:15:57 ] 質問をまとめるとですね・・・ string型を直接ディスクに書き込んだり直接読んだり出来るかという事です
189 名前:デフォルトの名無しさん mailto:sage [2007/12/11(火) 14:21:56 ] >>188 「直接」が曖昧 string s; ofstream f(filename); f << s; fwrite(&s, sizeof(string), 1, fp);
190 名前:デフォルトの名無しさん mailto:sage [2007/12/11(火) 14:23:43 ] >>189 その方法で読み書き出来るんですか?試してみます stringは読み込むときにresizeしておかなくても読み込めるんですか? 確保していないところに書き込まれないですか?
191 名前:デフォルトの名無しさん mailto:sage [2007/12/11(火) 14:24:31 ] >>188 boost::serialization
192 名前:デフォルトの名無しさん mailto:sage [2007/12/11(火) 14:30:45 ] サンクス 出来ました #include <iostream> #include <fstream> #include <string> using namespace std; main(){ string s="this a pan.", t; fstream fp; fp.open("stringdat", ios::out | ios::binary ); fp.write( (char*) &s, sizeof(s)); fp.close(); fp.open("stringdat", ios::in | ios::binary ); fp.read( (char*) &t, sizeof(s));; fp.close(); cout<<t;}
193 名前:デフォルトの名無しさん mailto:sage [2007/12/11(火) 14:32:32 ] string sを長くしたら表示中にエラーが出ました やはり確保しておかないと駄目ですか
194 名前:デフォルトの名無しさん mailto:sage [2007/12/11(火) 14:36:48 ] ありがとうございました 確保しておいたらエラー出ませんでした
195 名前:デフォルトの名無しさん mailto:sage [2007/12/11(火) 14:39:32 ] >>192 これは良いコードw
196 名前:デフォルトの名無しさん mailto:sage [2007/12/11(火) 14:50:57 ] でも確保するサイズがなぜか2倍以下だとエラーになります なんか不安定だしメモリ食うので安全にcharにしようと思います
197 名前:デフォルトの名無しさん mailto:sage [2007/12/11(火) 14:55:50 ] YUV422に関して、ど素人なのですが 再生用YUV422のサンプルファイルと、 再生用サンプルプログラム等を ダウンロード出来るサイトご存じの方いませんでしょうか?
198 名前:デフォルトの名無しさん mailto:sage [2007/12/11(火) 14:59:22 ] >>192 うわぁ…
199 名前:デフォルトの名無しさん mailto:sage [2007/12/11(火) 15:17:07 ] すみません vector<string>なんですけど、既に10Mバイトくらい使用していたとして、確保されている領域も無いとき 新たにstring型を追加するときは、別の空き領域を探してきて元のデータをコピーするんでしょうか? 手間かかりますよね? また、vector<string> str; str.resize(100000); と十分に確保してあれば各str[n]がどんなにメモリ食っても再配置されませんか?
200 名前:デフォルトの名無しさん mailto:sage [2007/12/11(火) 15:18:39 ] 再配置されているかどうか調べるにはどうすればいいですか? 意図的に再配置を起こさせるような実験プログラムは判りますか?
201 名前:デフォルトの名無しさん mailto:sage [2007/12/11(火) 15:31:39 ] >>199 きっと意図しているのは str.reserve() なのではないかと思うけど、ふ つうの実装だったらたくさんリザーブしておけばそこまでは再配置され ないんじゃないかねえ。規格は手元にないので知らない。 メモリへの要件が厳しいようなら、自分で vector 相当のものを書いた ほうが柔軟に対応できるかもしれない。
202 名前:デフォルトの名無しさん mailto:sage [2007/12/11(火) 15:43:51 ] int main(){ void *p[10000]; string str; str="This is a pan."; p[0]=&str; cout<< *((string*)(p[0])); } とやれば出来ますけど、サブルーチンでstringを追加するにはstatic 付けたらいいですか? newで確保してもメモリから消えないんですけど値はつねに保証されますか?
203 名前:デフォルトの名無しさん mailto:sage [2007/12/11(火) 15:46:45 ] 自前で作るならstring使わないでchar配列を動的確保した方が安定しそうですね でもサブルーチンで確保しても値は保証されますか?
204 名前:デフォルトの名無しさん mailto:sage [2007/12/11(火) 15:49:12 ] そもそも、メンバ関数を初期化という概念がどこから来たのか知りたいぜ。
205 名前:デフォルトの名無しさん mailto:sage [2007/12/11(火) 15:54:00 ] >>202 の場合、pを引数で渡しても、strは消滅の可能性がありますよね だから読み込めない場合がありますよね staticやnewで確保すればpを引数にしてデータアクセスはつねにできますか
206 名前:デフォルトの名無しさん mailto:sage [2007/12/11(火) 15:57:34 ] >>199 全体のデータサイズよりも、文字列の個数によって方法論が決まってくるんじゃないかな。 stringの実装には色んなやり方があるけど、いずれの場合も、サイズの大きな中身はポインタで持ってる。 だから、10MB使用している状態でvectorが要素を再配置したからといって、その10MBのすべてが せっせと大移動を繰り広げるわけではない。 たとえばvector<string>の要素数が10で、それぞれのstringサイズが1MB、合計10MBのとき、 そのあとpush_back()で再配置が起きても、移動するのは「string型そのもの」だけ。 string型自体のサイズは、せいぜい数バイトから多くても20バイト台で、これが10個コピーされるだけってことになる。 でも、「平均10バイトの文字列が100万個で10MB」となると、これの再配置は確かにコストが高いわけで、 つまりこの辺は、君がイジろうとしているデータの性質次第で、アプローチが変わってくる部分だと思う。
207 名前:デフォルトの名無しさん mailto:sage [2007/12/11(火) 16:03:23 ] >>206 ありがとう
208 名前:デフォルトの名無しさん mailto:sage [2007/12/11(火) 16:09:55 ] >>202 ,203,205 どうも基本的なC++の知識が欠如しているように見えますよ。C++の入門 書を一冊読んでみたらいかが? メモリ効率を気にするのはまだ早いんじゃ ない? もちろん、 void add_item(string** array, int capacity, int size) { if (size >= capacity) return; string str = "..."; array[size++] = &str; } という風にすると、array[]に入れた値は関数から抜けた時点で無効です。 static にしたら汎用性がなくなりそうなので、new でしょうね。
209 名前:デフォルトの名無しさん mailto:sage [2007/12/11(火) 18:28:51 ] >>206 >>stringの実装には色んなやり方があるけど、いずれの場合も、サイズの大きな中身はポインタで持ってる。 >>だから、10MB使用している状態でvectorが要素を再配置したからといって、その10MBのすべてが >>せっせと大移動を繰り広げるわけではない。 では、vector型データの参照渡しは無意味ってこと? 例えば vector<int>& Foo(){ return hoge; }; //@ vector<int> Foo(){ return hoge; }; //A この場合、@もAも関数を引き渡すコストは同じなの?
210 名前:デフォルトの名無しさん mailto:sage [2007/12/11(火) 18:37:26 ] お前は何を言ってるんだ
211 名前:デフォルトの名無しさん mailto:sage [2007/12/11(火) 18:40:16 ] >206 でもさ、vectorの再配置は、コピーコンストラクタで行うんだから、 stringの性質によっては、どっちも10MBすべて大移動になるでそ? 特に最近は、スレッドの絡みで、COWしないのが流行りだし。
212 名前:デフォルトの名無しさん mailto:sage [2007/12/11(火) 19:25:24 ] なんか話が噛み合ってないおかーん
213 名前:デフォルトの名無しさん mailto:sage [2007/12/11(火) 19:58:08 ] rope使えよ
214 名前:デフォルトの名無しさん mailto:sage [2007/12/11(火) 21:42:35 ] struct point{int x,y;}; を<algonithm>でソートしたいんですが、 キーがxの順とyの順を切り替えて使いたいです 切り替えないなら bool operator< (const node& left, const node& right){return (left.x < right.x);} でいいんですが、切り替える時はどういう風にオペレータを定義すればいいんでしょうか? どちらの順にするかは各クラスによって決まっているので出来ればメンバ関数化したいです 環境はg++です
215 名前:デフォルトの名無しさん mailto:sage [2007/12/11(火) 21:51:05 ] x, yそれぞれの比較関数作ってsortに渡せばいいじゃん
216 名前:デフォルトの名無しさん mailto:sage [2007/12/11(火) 22:04:16 ] >>215 クラス内に書くと operator<(const point&, const point&)' must take exactly one argument と怒られるので仕方なくグローバル関数にしています、 上と同じ内容のオペレータをメンバ関数にするにはどうしたらいいのかサッパリでorz
217 名前:デフォルトの名無しさん mailto:sage [2007/12/11(火) 22:08:54 ] bool operator < (const point& rhs) { return (this->x < rhs.x); }
218 名前:デフォルトの名無しさん [2007/12/11(火) 22:50:00 ] age
219 名前:デフォルトの名無しさん mailto:sage [2007/12/11(火) 23:37:46 ] >>217 'class Hoge' has no member named 'x' オペレータ全然わかんねorz
220 名前:デフォルトの名無しさん mailto:sage [2007/12/11(火) 23:41:39 ] pointをメンバで持ってるクラスについて、そのpointで比較したいなら、 当然、rhsの型をそのクラスにして、比較したいpoint型のメンバ変数名を 差し挟まなくちゃあいけませんよ。
221 名前:デフォルトの名無しさん [2007/12/12(水) 00:12:25 ] 現在、60kbyte分のメモリをmallocしてmemsetで60kbyteのサイズ分文字を格納しています。 これを、ソケット通信すると、MTUごとにフラグメント化され60kbyteの一つのデータとして ではなく、MTUサイズ分の複数の異なるデータになってしまいます。 (途中の経路でパケットキャプチャしてオフセットフラグを確認しすべて0だった) そこで、60kbyteのデータを一つのデータとして作成する方法を教えていただけませんか?
222 名前:デフォルトの名無しさん mailto:sage [2007/12/12(水) 00:14:03 ] TCPは?
223 名前:221 mailto:sage [2007/12/12(水) 00:22:01 ] >>222 TCP通信かUDP通信かってことですか? TCP通信でオプション等は何も設定していません。 質問の意図を取り違えていたらすみません。
224 名前:デフォルトの名無しさん mailto:sage [2007/12/12(水) 00:47:36 ] 64bit毎のlongの配列のデータを12bit毎に処理をして64bitの配列に戻したいのですが、 どのようにすればいいでしょうか? 環境は、windowsでcygwinのgccのC++です。 配列の数は上から与えられます。12bit毎にデータの加工をして上に返します。 一応、途中まで考えたのですが、力技しか思いつかず、凄く長くなってしまいます。 関数は以下のような形です。 bool CLASS::exe(std::vector<signed long>&din, std::vector<signed long>&dout) { long in_data[3]; int data_12b[16]; long size = din.size(); for(int i=0; i<size; i+=3){ data[0] = din[i]; data[1] = din[i+1]; data[2] = din[i]+2; // ここで12bitのデータにする // ここで12bitのデータの処理 // ここでlong3つの変数に入れる }
225 名前:デフォルトの名無しさん mailto:sage [2007/12/12(水) 00:57:22 ] なんで12bitなんだろう 力業しかないんじゃない?
226 名前:デフォルトの名無しさん mailto:sage [2007/12/12(水) 01:04:43 ] >>224 signed だとシフトが安全に使えないから無理な予感。符号はどうなってんの?
227 名前:デフォルトの名無しさん mailto:sage [2007/12/12(水) 01:06:41 ] >>216 なんでメンバ関数にしたいの?関連のあるコードだからってことなら static メンバ関数に すればよさそうだけど。
228 名前:デフォルトの名無しさん mailto:sage [2007/12/12(水) 01:21:38 ] >>225 よく分からないのですが、16ビット×16コのデータをまいびいて圧縮して、 12ビット×16コにしてるみたいです。 力技だと data_12b[0] = (data[0] >> 52) & 0x0FFF; data_12b[1] = (data[0] >> 40) & 0x0FFF; ・・・ みたいな感じになるんでしょうか? >>226 12bitのデータに符号はないです。なので符号のbitは符号として使ってません。 関数の呼び出し部分はunsignedにできるのでそっちにしてみます。
229 名前:デフォルトの名無しさん mailto:sage [2007/12/12(水) 01:34:13 ] 12bit + パディング4bt × 16コ にしてもらえ
230 名前:デフォルトの名無しさん mailto:sage [2007/12/12(水) 01:49:20 ] >>229 天才現る!その考えはなかったわ。 うん、そうしよう。 ありがとうございました。
231 名前:デフォルトの名無しさん mailto:sage [2007/12/12(水) 02:30:00 ] すいませんCの質問かどうか微妙なんですが、 同じ数字を繰り返す式例えば while(){ int num++; a = num % 3; }であれば012012012とaの値が変化しますよね、 これと別に0121012101210って感じで変化する数字を作り出すやり方ってありますかね?
232 名前:デフォルトの名無しさん mailto:sage [2007/12/12(水) 02:34:06 ] >>231 3行目、aじゃなくてnumな。あとnumのスコープが狭すぎ。 int num=0; static int array[] = { 0, 1, 2, 1 }; while() { int a = array[ num ]; num = ( num + 1 ) % 4; } テーブルで変換とかどう? 1の次が0になる場合と2になる場合があるから単純なステートマシンじゃ無理かと。
233 名前:デフォルトの名無しさん mailto:sage [2007/12/12(水) 02:39:43 ] >>232 なるほど。おっしゃるとおりテーブル使ったほうがよさげですね。 実はこれ今作ってるゲームのアニメパターンの変化部分で使うんですよ。 グラデーションみたいなアニメなんで012012みたいな循環数字(?)じゃ気に入らなくて、、、 ありがとでした!!
234 名前:デフォルトの名無しさん mailto:sage [2007/12/12(水) 02:53:15 ] >>221 TCPなら順序制御があるけど、何が問題なの? 少なくともトランスポート層以上では正しい データになってるだろ。 アプリ層で60kByte取得するまで待てばいいんでは?
235 名前:デフォルトの名無しさん mailto:sage [2007/12/12(水) 02:58:13 ] >>233 三角関数使うといいんじゃね?
236 名前:デフォルトの名無しさん mailto:sage [2007/12/12(水) 03:39:42 ] int main(){ const int C = 100; const double PI=3.1415f; const double K = 10.0f; double i=0.0f; for(int r =0;r<C;r++){ double t=0; for(double x=1.0f;x<K ; x=x+1.0f){ t = t + sin((x* PI )/2.0f ) * (sin( x * i))/(x*x); } cout << static_cast<int>(round(fabs(t*(8.0f/(PI*PI))) * 2)) << endl;; r%4==0 ? i=0.0f:i=i+PI/4.0f; } return 0; }
237 名前:デフォルトの名無しさん mailto:sage [2007/12/12(水) 05:07:14 ] >>224 どうしてunion使わないの?
238 名前:デフォルトの名無しさん mailto:sage [2007/12/12(水) 07:25:38 ] struct Foo { double value; char *name; }; int main (int argc, char *argv[]){ int i; for(i = 1;i < argc; i = i + 2) struct Foo test[i] = {atof(argv[i]), argv[1+i]}; とやると、 .c:13: error: parse error before 'struct' .c:17: error: 'test' undeclared (first use in this function) .c:17: error: (Each undeclared identifier is reported only once .c:17: error: for each function it appears in.) ってコンパイルエラーが出てコンパイルできないんですけれど、 どうやれば構造体を宣言できるのか分からないので教えていただけないでしょうか?
239 名前:デフォルトの名無しさん mailto:sage [2007/12/12(水) 07:44:39 ] >>238 for(i = 1;i < argc; i = i + 2) struct Foo test[i] = {atof(argv[i]), argv[1+i]}; ↑こんなことできん。 いったい何をしたいんだ?
240 名前:デフォルトの名無しさん mailto:sage [2007/12/12(水) 08:10:40 ] >>239 できないんですか〜。 残念。 正確にやりたいことを書くと、引数に「100,りんご,200,みかん,150,バナナ」みたいなものがあります。 でも引数の数は「100,りんご,200,みかん」かもしれないし、「100,りんご」かもしれないし、もしかしたら引数がないかもしれません、 で、まず構造体を作って、 struct Foo { double value; char *name; }; int i; for(i = 1;i < argc; i = i + 2) struct Foo test[i/0] = {atof(argv[i]), argv[1+i]}; ってできないかなぁと思って。
241 名前:240 mailto:sage [2007/12/12(水) 08:12:12 ] struct Foo test[i/2] = {atof(argv[i]), argv[1+i]}; の間違いです。
242 名前:デフォルトの名無しさん mailto:sage [2007/12/12(水) 10:06:49 ] >>236 それはやりすぎwww
243 名前:デフォルトの名無しさん mailto:sage [2007/12/12(水) 10:31:57 ] i/0ってw
244 名前:デフォルトの名無しさん mailto:sage [2007/12/12(水) 10:44:43 ] >>224 要素が12bitのように振舞うvector<signed long>のラッパー vector<signed long>に12bitずつ格納するラッパー イテレータも実装すればいろいろ応用できるだろう
245 名前:デフォルトの名無しさん mailto:sage [2007/12/12(水) 11:12:50 ] >>240 造体の要素ごとに入れていくか、 コンストラクタつきの構造体(クラス)にして、引数にするとかじゃね? っていうか、やりたい事を見ると、簡単な構文解析が必要なんじゃね?
246 名前:デフォルトの名無しさん mailto:sage [2007/12/12(水) 11:51:50 ] >>221 MTU (最大転送単位)なんだから、MTUより大きなパケットは使えません。 なんで分割されると困るの?
247 名前:デフォルトの名無しさん mailto:sage [2007/12/12(水) 13:23:24 ] if(!a)printf("hello world"); だとaが偽(0の時)の時printfを実行するという意味でしょうか
248 名前:デフォルトの名無しさん mailto:sage [2007/12/12(水) 13:31:10 ] そうですよ。
249 名前:デフォルトの名無しさん mailto:sage [2007/12/12(水) 13:34:02 ] >>247 の質問をエスパーするとだな 真が0以外なのに正常終了が0なのはどうしてですか ってことだと思う
250 名前:デフォルトの名無しさん mailto:sage [2007/12/12(水) 13:42:26 ] #include <vector> #include <sstream> #include <algorithm> struct Foo { double value; std::string name; }; int main (int argc, char *argv[]){ { std::vector<Foo> FooArray; if (argc > 1) { std::vector<char> str(argv[1], argv[1] + strlen(argv[1]) + 1); std::replace(str.begin(), str.end(), ',', ' '); std::stringstream buf(&str[0]); Foo data; while (buf >> data.value >> data.name) FooArray.push_back(data); } return 0; }
251 名前:デフォルトの名無しさん mailto:sage [2007/12/12(水) 13:44:05 ] >>250 は>>240 へのレスね。ちなみにマルチバイト文字列だとバグるかも
252 名前:デフォルトの名無しさん mailto:sage [2007/12/12(水) 13:50:44 ] >>250 240 を見る限り、実際にカンマ区切りのテキストを入力するわけじゃなくて argv に2つずつ並んでるみたいだよ。そんなめんどくさいことしなくていいみたい。
253 名前:デフォルトの名無しさん mailto:sage [2007/12/12(水) 14:01:09 ] #include <vector> #include <string> int main(int argc, char ** argv) { struct valname { double value; std::string name; }; std::vector<valname> valnames; for (int ic = 1; ic < argc; ic += 2) { valname data = {atof(argv[ic]), argv[ic + 1]}; valnames.push_back(data); } for (std::vector<valname>::const_iterator it = valnames.begin(); it != valnames.end(); ++it) { std::cout << it->value << ' ' << it->name << '\n'; } return 0; }
254 名前:デフォルトの名無しさん mailto:sage [2007/12/12(水) 15:08:21 ] ポインタ配列は、一つ当たり32bit使いますか?
255 名前:デフォルトの名無しさん mailto:sage [2007/12/12(水) 15:12:56 ] >>254 環境によります。 printf("%u\n", sizeof(void *))とでもしてバイト数を割り出してみてください。 大抵の環境では、その8倍がビット数になります。
256 名前:デフォルトの名無しさん mailto:sage [2007/12/12(水) 15:14:39 ] サンクス
257 名前:デフォルトの名無しさん [2007/12/12(水) 15:29:40 ] int ch; while((ch=getchar())!=EOF){ if(if(isalpha(ch)) analysis(ch); } ってなってるところで11Fってやったらanalysis(ch)に11回Fをいれるようにしたいんですどどうすればいいですか? analysis(ch)は他の関数です。
258 名前:デフォルトの名無しさん mailto:sage [2007/12/12(水) 15:38:14 ] >>257 ループの外で count という変数を宣言して、0で初期化 ループの中で、isdigit() だったら count = count * 10 + ch-'0' analysis() を呼ぶところで、count の回数だけ繰り返し
259 名前:デフォルトの名無しさん mailto:sage [2007/12/12(水) 15:39:51 ] >>257 日本語とCでOK。
260 名前:デフォルトの名無しさん [2007/12/12(水) 16:09:33 ] >>258 有難うございます、やってみます。
261 名前:デフォルトの名無しさん [2007/12/12(水) 16:59:20 ] const int num = 5; int a[num]; って、C++では、配列を宣言ってできるの? これが出来たら、配列が動的に宣言できちゃうことにならない?