[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 1001- 2chのread.cgiへ]
Update time : 05/28 11:42 / Filesize : 246 KB / Number-of Response : 1002
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

【初心者歓迎】C/C++室 Ver.45【環境依存OK】



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

82 名前:デフォルトの名無しさん mailto:sage [2007/12/09(日) 15:20:07 ]
int a; <= これはどっち?
int main(){
int b; <= これはどっち?
}
両方とも宣言定義です。
略して、宣言、定義、または、宣定という人もいます。

83 名前:デフォルトの名無しさん mailto:sage [2007/12/09(日) 15:20:46 ]
>>81
できません。 vector にすれば初期化できます。この場合は本体の中で
ZeroMemory() しても同じ結果になります。

84 名前:デフォルトの名無しさん mailto:sage [2007/12/09(日) 15:32:20 ]
>>83そうですか、ではあきらめます


85 名前:デフォルトの名無しさん mailto:sega [2007/12/09(日) 17:37:11 ]
クラスとかはヘッダに書くと思いますが
コンパイルしてオブジェクトにしておくことはできないのでしょうか。
毎回コンパイルするのは非効率だと思います。

86 名前:デフォルトの名無しさん mailto:sage [2007/12/09(日) 17:45:50 ]
>>85
C/C++ ではヘッダでは定義なしの宣言だけにしておいて、対応するソースファイルで
定義を与えるという方法で重複コンパイルを避けるのが一般的。

C++ のテンプレートによってこの方法がうまく機能しにくい状況になっているので、
コンパイラによってはプリコンパイルドヘッダとか、あらかじめヘッダをコンパイルして
保存しておく機能を持っているものもある。

87 名前:デフォルトの名無しさん mailto:sage [2007/12/09(日) 17:57:13 ]
>>86
そのあたりの「一般的」な作法がまとめてある書籍はありますか?
VC++では無い本がいいけど、独習C++とかになるんですかね?

88 名前:デフォルトの名無しさん mailto:sage [2007/12/09(日) 19:20:51 ]
お作法のまとめだったら Effective シリーズとかがいいんじゃないの。

89 名前:デフォルトの名無しさん mailto:sage [2007/12/09(日) 20:43:11 ]
>>61
ちょっと遅レスだが
BCCの最新バージョンBCC5.9.2(C++Builder2007付属)では落ちない

90 名前:wolf ◆8VH3XAqjlU mailto:sage [2007/12/09(日) 21:11:03 ]
>>82
Sure, the following may not be accepted in the school.

Declaration:
However, many declarations serve as definitions.

Definition
A definition provides information that allows the compiler to allocate memory for objects or generate code for functions.

Object
An object is an instance (a data item) of a user-defined type (a class type).

C++ terms used in this book are defined in the following table:
msdn.microsoft.com/library/ja/default.asp?url=/library/ja/vclang/html/_pluslang_terms.asp



91 名前:デフォルトの名無しさん mailto:sage [2007/12/09(日) 21:36:31 ]
>>90
基地外スレにお帰りください

92 名前:デフォルトの名無しさん mailto:sage [2007/12/09(日) 21:58:13 ]
お勧めなエディタ教えて

93 名前:デフォルトの名無しさん mailto:sage [2007/12/09(日) 21:59:25 ]
c言語って数学で言うところの中括弧{}と同じ機能を持つ演算子って有る?
それとも、変数を使って一時的に値を記憶させないと駄目?

94 名前:デフォルトの名無しさん mailto:sage [2007/12/09(日) 21:59:56 ]
>>92
cat

95 名前:デフォルトの名無しさん mailto:sage [2007/12/09(日) 22:00:46 ]
>>92
すれ違い。いちおう誘導しとくけど、その聞き方じゃどこでもまともな答えは
期待できないと思われ。せめて今使ってるやつのどこが不満なのか書かないと。

【エディタ】ソース何で書いてる? 1スレ目
pc11.2ch.net/test/read.cgi/tech/1164154920/

テキストエディタをまた〜り語ろう ver.24
pc11.2ch.net/test/read.cgi/software/1194361643/

96 名前:デフォルトの名無しさん mailto:sage [2007/12/09(日) 22:02:15 ]
>>93
数学で言うところの中括弧ってなんだ?式の優先順位を決めるための括弧なら、
何重だろうと全部丸括弧を使うんだけど。

97 名前:デフォルトの名無しさん mailto:sage [2007/12/09(日) 22:12:44 ]
>>96
そうなんですか!
それなら、
数学で
{(5)(176) - (26)^2}{(5)(145) - (25)^2}のルートって、
C言語なら、
sqrt(((5)*(176) - (26)*(26))*((5)*(145) - (25)*(25)))
でOKですか?

98 名前:デフォルトの名無しさん mailto:sage [2007/12/09(日) 22:21:53 ]
>>97
演算子の優先順位を調べたらわかると思うけど、
乗除算の方が加減算より優先されるので括弧を減らせるよ

99 名前:デフォルトの名無しさん mailto:sage [2007/12/09(日) 22:24:45 ]
>>98
なるほど!
だったら、
sqrt((5*176 - 26*26)*(5*145 - 25*25))
でおkですね!

100 名前:デフォルトの名無しさん mailto:sage [2007/12/10(月) 02:08:00 ]
ハッシュテーブル作るときなんですけど・・・

vector< myclass >型の固定長配列を用意して、それを例えばTBL[n]として
衝突が起こったらTBL[n].resize(2)して別のデータを格納していけば実装できそうですけど
一次元に自分で登録先を見つけてくる方法より効率悪いですか? 衝突は頻繁に起こらないとします



101 名前:デフォルトの名無しさん mailto:sage [2007/12/10(月) 02:42:27 ]
>>100
効率って言っても空間効率と速度効率がある。速度にしても、実際の比較が
ハッシュ関数に比べてどんだけ思いかで変わるでしょ。そこらへんの情報無しには
答えようがない。効率は実測が基本。

102 名前:デフォルトの名無しさん mailto:sage [2007/12/10(月) 02:53:22 ]
メモリ効率は動的確保の方が上ですけど、メモリ解放と確保にかかる時間なんですよね
実測してみます

103 名前:93 mailto:sage [2007/12/10(月) 04:46:38 ]
質問です。
hoge = (26 * 176 - 25 * 24) / sqrt((26 * 23 - 5 * 5) * (26 * 6 - 7 * 10));
というプログラムを書いて正しい結果が出力されたのですが、
これはどうしてでしょうか?
sqrtは戻り値として、平方根を返す関数ですが、この場合戻り値を受け取っていませんよね。
まるで、sqrt((26 * 23 - 5 * 5) * (26 * 6 - 7 * 10)がこの式の計算結果そのもののように感じるのですが、これはC言語の機能なのでしょうか?


104 名前:デフォルトの名無しさん mailto:sage [2007/12/10(月) 04:52:09 ]
>>103
戻り値はちゃんと / 演算子が受け取っています。

105 名前:93 mailto:sage [2007/12/10(月) 05:02:22 ]
>>104
ええっ、そうなんですか?
演算子にそんな機能が有ったとは知らなかったです。
どこか詳しく説明している本やサイトは無いでしょうか?

106 名前:デフォルトの名無しさん mailto:sage [2007/12/10(月) 05:04:46 ]
無い

107 名前:93 mailto:sage [2007/12/10(月) 05:10:40 ]
無いのにどうして分かったんですか!
どうして戻り値を受け取らないのにちゃんと計算できたのがとても不思議なんですけれど。


108 名前:デフォルトの名無しさん mailto:sage [2007/12/10(月) 05:12:39 ]
戻り値は除算演算子が「受け取っている」

109 名前:デフォルトの名無しさん mailto:sage [2007/12/10(月) 05:13:08 ]
何が戻値を「受け取ってない」んだい

110 名前:デフォルトの名無しさん mailto:sage [2007/12/10(月) 05:13:11 ]
二項演算子の意味をちゃんと調べてみ。



111 名前:デフォルトの名無しさん mailto:sage [2007/12/10(月) 05:13:18 ]
>>103
戻り値は受け取らなくてもいい

sqrt(10);
という文だけでもエラーにならない

返却される数値がdoubleならば数字を直接かくのと同じ

2.5 * 8

という計算は

x=2.5 ; y= 8;
x * y としなくても計算できる

112 名前:デフォルトの名無しさん mailto:sage [2007/12/10(月) 08:23:00 ]
>>107
君が何を不思議がっているのかとても不思議なんですけど

113 名前:デフォルトの名無しさん mailto:sage [2007/12/10(月) 08:28:44 ]
>>103
>sqrt((26 * 23 - 5 * 5) * (26 * 6 - 7 * 10)がこの式の計算結果そのもののよう
その通り
ちゃんと分かってんじゃん

114 名前:デフォルトの名無しさん mailto:sage [2007/12/10(月) 08:28:51 ]
そもそも
a = func(5);
で、aに代入できるのは、右辺が値を持ってることを推測できそうなものだけど

115 名前:デフォルトの名無しさん mailto:sage [2007/12/10(月) 08:30:02 ]
あ、日本語になってねぇorz

116 名前:デフォルトの名無しさん mailto:sage [2007/12/10(月) 08:30:42 ]
>>114
きっと、
変数名=関数名(引数);
て形自体が一つの構文だと思ってるんだろうな
戻り値を受け取る構文

117 名前:デフォルトの名無しさん mailto:sage [2007/12/10(月) 08:34:31 ]
>>93

数学で、

hoge = (26 × 176 - 25 × 24) / √((26 × 23 - 5 × 5) × (26 × 6 - 7 × 10))

と書いても、計算の仕方のルールがあるから、正しい結果を出せるでしょ。
それと同じで、sqrt()を先に計算して、その戻り値を使って / を計算するルールがあるから。


118 名前:デフォルトの名無しさん mailto:sage [2007/12/10(月) 08:36:06 ]
int func(int z) { return z * 2; }
a = 8 + func(5);
って文があるとコンパイラは
a = 8 + 10;
a = 18;
って感じで処理する

119 名前:デフォルトの名無しさん mailto:sage [2007/12/10(月) 08:43:37 ]
断定口調かよ

120 名前:デフォルトの名無しさん mailto:sage [2007/12/10(月) 09:00:02 ]
ディレクトリ構造をメモリに保存するにはどうしたらいいですか?
ファイルに連番を付けてファイルのはパスがわかるようにしたいです



121 名前:デフォルトの名無しさん mailto:sage [2007/12/10(月) 09:01:47 ]
多分木がいいとおもうのですが簡潔な方法有りますか

122 名前:デフォルトの名無しさん mailto:sage [2007/12/10(月) 09:45:50 ]
>>120-121 とりあえず自分でやれよ。具体的にわかんないところがあったら相談してもいいからさ。

123 名前:デフォルトの名無しさん [2007/12/10(月) 09:46:43 ]
前スレの一人用チャットです。
┌──┐
│   │←出力用子ウィンドウ    入力ウィンドウに文字を打ち、エンターキーが押されたら
└──┘                  出力ウィンドウに文字が表示されるようにしたい。
┌──┐←入力用子ウィンドウ
└──┘
ソースttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5461.txt

winspectorでチェックしたところ、そもそもエンターキーが押された信号が出ていなかったので、
子ウィンドウのウィンドウプロシージャも作ったんですが、今度は入力用子ウィンドウが表示されなくなりました。

プログラムを開始してすぐにエンターキーを押すとメッセージボックスが出るので、入力用子ウィンドウ自体は
どこかに作られていると思うんですが、自分の設置した場所には見当たりません。
猫でも〜を読んでもどこが間違っているのか分からないんですが、どうしたら子ウィンドウが表示されますか。

あと、まだ中身を作っていないのに、GUI?だけでやたら手こずってるんですが、こんなもんですか?

124 名前:デフォルトの名無しさん mailto:sage [2007/12/10(月) 09:50:44 ]
特警しか思い出せなかった orz

125 名前:デフォルトの名無しさん mailto:sage [2007/12/10(月) 10:27:15 ]
動的確保の変数って

int *n=new int;
と定義するんですか?
なんかいつも*nとして使えなくて不便なんですが
配列の場合は静的と同じですが なんとかなりますか

126 名前:デフォルトの名無しさん mailto:sage [2007/12/10(月) 10:33:35 ]
>>123 C/C++でGUIはめんどい。そんなもん。

>>125
それであってる。deleteを忘れるなよ。
最後の行がよくわからない。

127 名前:デフォルトの名無しさん mailto:sage [2007/12/10(月) 10:37:26 ]
int a[10]; としたものとint *a=new int [10];
の使い方は同じなのに
変数だと違います

128 名前:デフォルトの名無しさん [2007/12/10(月) 10:48:13 ]
>>123
SetWindowLongをやめればとりあえず表示された

129 名前:デフォルトの名無しさん mailto:sage [2007/12/10(月) 10:57:45 ]
>>123
130行目の引数がおかしいお
エディットコントロールのデフォルトウィンドウプロシージャが呼ばれてない

130 名前:デフォルトの名無しさん mailto:sage [2007/12/10(月) 10:58:54 ]
int **p; としたとき
p[100]は、領域確保しなくてもつねにアクセスできますか?
アドレスの配列を作りたいのですが




131 名前:デフォルトの名無しさん mailto:sage [2007/12/10(月) 11:01:28 ]
これはエラーになります どうすればいいですか?
int **p,n=100;
p[10000]=&n;
cout<<*p[10000];

132 名前:デフォルトの名無しさん mailto:sage [2007/12/10(月) 11:03:56 ]
これはエラーになりません ポインタ配列も動的確保などしないと使えませんか?

int* *p= new int* [20000];
int n=100;
p[10000]=&n;
cout<<*p[10000];


133 名前:123 mailto:sage [2007/12/10(月) 11:04:25 ]
>>129
うあああああ!!DefProcにしたらできました!!
ありがとうございます!!

134 名前:デフォルトの名無しさん mailto:sage [2007/12/10(月) 11:15:44 ]
多分木構造出来ましたよ

#include <iostream>
#include <string>
#include <vector>
using namespace std;

class tree{ public: string data; vector< tree* > p; };

tree* create(string data){
tree *node=new tree; node->data=data; return node; }

void insert(tree *node, string data ){
node->p.push_back( create(data) );}

135 名前:デフォルトの名無しさん mailto:sage [2007/12/10(月) 12:08:55 ]
自分のIPアドレスを取得するにはどうしたらいいのでしょうか?
C言語、Windowsでお願いします。

136 名前:デフォルトの名無しさん mailto:sage [2007/12/10(月) 12:30:48 ]
>>135
ipconfia

137 名前:デフォルトの名無しさん mailto:sage [2007/12/10(月) 13:28:58 ]
複数のIP持ってる場合もあるしなあ

138 名前:デフォルトの名無しさん mailto:sage [2007/12/10(月) 13:31:42 ]
NICを全部あげるんだ

139 名前:デフォルトの名無しさん mailto:sage [2007/12/10(月) 13:32:17 ]
>>135
gethostbyname("")で取得

ipconfigの結果を解析

140 名前:135 mailto:sage [2007/12/10(月) 13:44:23 ]
プログラムの中でipconfigを実行するにはどのようにすれば
いいのでしょうか?
参考になるようなサイトを教えていただけると嬉しいです。



141 名前:デフォルトの名無しさん mailto:sage [2007/12/10(月) 13:56:44 ]
system()
CreateProcess()
あとはパイプとか適当にぐぐれ

142 名前:135 mailto:sage [2007/12/10(月) 14:03:05 ]
>>141
ありがとうございます。
早速調べてみます

143 名前:デフォルトの名無しさん mailto:sage [2007/12/10(月) 14:29:09 ]
>>131-132
int *a;
ポインタはアドレスを入れるための変数と考えるんだ。

int *a[100];
ポインタ配列は、アドレスを入れるための変数からなる配列

int **a;
ポインタのポインタは、ややこしいが
(アドレスを入れるための変数の)アドレスを入れるための変数

きちんと整理して理解しておいた方が良いよ。

144 名前:デフォルトの名無しさん mailto:sage [2007/12/10(月) 20:15:27 ]
クラスのコンストラクタ呼び出しや初期化リスト以外で、変数を
int x(0); のように初期化するのってキモイですか?

145 名前:デフォルトの名無しさん mailto:sage [2007/12/10(月) 20:35:11 ]
かなり初歩的な質問だけど、ボタンのCaptionをプログラム内で変えるのってどうやるの?

146 名前:デフォルトの名無しさん mailto:sage [2007/12/10(月) 21:12:53 ]
SetWindowText()
Win32APIスレへ

147 名前:デフォルトの名無しさん [2007/12/10(月) 22:41:06 ]
unsigned long a ,b;
int N;
とします。
Nは大きいです。


printf(" time=%f[s]\n", (a-b)/N);
 だとうまく表示されるんですが、

cout<<"time= "<<(a-b)/N<<"\n";だと0になってしまいます。

coutを使って書きたいのでアドバイスお願いします

148 名前:デフォルトの名無しさん mailto:sage [2007/12/10(月) 22:43:54 ]
>>147
どちらもうまく表示されない
double N; としろ。

149 名前:デフォルトの名無しさん mailto:sage [2007/12/10(月) 22:45:31 ]
>>148
ああ!わかりました

150 名前:デフォルトの名無しさん mailto:sage [2007/12/10(月) 23:45:42 ]
>>144
そんなのキモイなんて言ってたら引数付きコンストラクタしかないクラスで
変数が作れないだろ。



151 名前:デフォルトの名無しさん mailto:sage [2007/12/10(月) 23:54:39 ]
いや、だから彼はPOD型に使うのはキモいかと言ってるんだと思うよ

152 名前:デフォルトの名無しさん mailto:sage [2007/12/10(月) 23:58:49 ]
書き方が統一できていいじゃないか

153 名前:デフォルトの名無しさん mailto:sage [2007/12/11(火) 00:01:56 ]
一歩間違えると関数宣言になって意味不明なエラー出るから、っていうかそうなったことがあるから、
ちょっと怖いかな。

C からやってる人のこと考えても、あからさまな利点が無い限りやめといたほうがいいと思う。

154 名前:デフォルトの名無しさん mailto:sage [2007/12/11(火) 00:13:54 ]
>>150-153
皆様ご意見ありがとうございます。
関数と間違えられたので止めといたほうがよさそうですね。

155 名前:デフォルトの名無しさん mailto:sage [2007/12/11(火) 04:57:40 ]
VCです
クラスのメンバー変数を、コンストラクタの初期化子で、初期化する事はできますし、
推奨もされていますが、クラスのメンバー関数は、コンストラクターの
初期化子で初期化するのは、できませんよね?
ていうか、メンバー関数に初期化という、概念は無いですよね?

156 名前:デフォルトの名無しさん mailto:sage [2007/12/11(火) 04:58:30 ]
>>155
関数を初期化?
関数ポインタではなくて?

157 名前:デフォルトの名無しさん mailto:sage [2007/12/11(火) 05:04:48 ]
>>156
>>関数を初期化?
そこを迷っているんです、メンバー関数の持つ変数は初期化できても
メンバー関数に初期化なんて、概念は無いですよねやっぱり
>関数ポインタではなくて?
関数ポインタなら初期化できるんでしょうか?



158 名前:デフォルトの名無しさん mailto:sage [2007/12/11(火) 05:08:44 ]
>>157
そもそも何を実現したいのかわからない。
具体的にどのような記述でどういう動作になるのを期待してるの?

159 名前:デフォルトの名無しさん mailto:sage [2007/12/11(火) 05:17:59 ]
>そもそも何を実現したいのかわからない。
今Effective C++読んでいて、Cしか知らないので、
目新しいことが多くて、C++の作法というか、スタイルに戸惑っているところです
具体的に何を期待するとかという意味はありません、ふと思ったまでです。



160 名前:デフォルトの名無しさん mailto:sage [2007/12/11(火) 05:25:14 ]
159ですが、具体的な質問をさせてください
class Foo {
  typedef 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
  } st_data;

public:
  Foo();
  ~Foo();
}:
ただ、この様な構造体をは@、Aの方法で初期化できると思うのですが
実装で@の方法で初期化した変数にアクセスすると
error C2512: 'st_data' : クラス、構造体、共用体に既定のコンストラクタがありません。
となります、組み込み型の変数はやはり、Aの方法でインスタンスを与えないといけないのでしょうか?
@とAの違いは、なんなんでしょうか?




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配列から変換する必要がでてしまいます






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<246KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef