[表示 : 全て 最新50 1-99 101- 201- 2chのread.cgiへ]
Update time : 06/26 19:16 / Filesize : 63 KB / Number-of Response : 255
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


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

スレを勃てるまでもないC/C++の質問はここで 14



1 名前:デフォルトの名無しさん [2010/03/23(火) 00:57:51 ]
スレを勃てるまでもない低俗なC/C++の質問はここでお願いします。

過去ログ
スレを勃てるまでもないC/C++の質問はここで
pc11.2ch.net/test/read.cgi/tech/1167476845/
スレを勃てるまでもないC/C++の質問はここで 2
pc11.2ch.net/test/read.cgi/tech/1178503366/
スレを勃てるまでもないC/C++の質問はここで 3
pc11.2ch.net/test/read.cgi/tech/1187521676/
スレを勃てるまでもないC/C++の質問はここで 4
pc11.2ch.net/test/read.cgi/tech/1221633708/
スレを勃てるまでもないC/C++の質問はここで 5
pc11.2ch.net/test/read.cgi/tech/1230516307/
スレを勃てるまでもないC/C++の質問はここで 6
pc11.2ch.net/test/read.cgi/tech/1231564903/
スレを勃てるまでもないC/C++の質問はここで 7
pc11.2ch.net/test/read.cgi/tech/1232983248/
スレを勃てるまでもないC/C++の質問はここで 8
pc12.2ch.net/test/read.cgi/tech/1235921779/
スレを勃てるまでもないC/C++の質問はここで 9
pc12.2ch.net/test/read.cgi/tech/1240022781/
スレを勃てるまでもないC/C++の質問はここで 10
pc12.2ch.net/test/read.cgi/tech/1242300936/
スレを勃てるまでもないC/C++の質問はここで 11
pc12.2ch.net/test/read.cgi/tech/1245059383/
スレを勃てるまでもないC/C++の質問はここで 12
pc12.2ch.net/test/read.cgi/tech/1248010352/
スレを勃てるまでもないC/C++の質問はここで 13
pc12.2ch.net/test/read.cgi/tech/1260842197/

2 名前:デフォルトの名無しさん mailto:sage [2010/03/23(火) 02:01:15 ]
iostreamってなんで嫌われてんの?

3 名前:デフォルトの名無しさん mailto:sage [2010/03/23(火) 05:08:48 ]
・printf, scanfでやるみたいな書式指定ができないから嫌い
・>>,<<で入力、出力というのが単に気持ち悪いから嫌い
・中身が複雑すぎて自分の頭では理解できないから嫌い
という理由はよく見かける。

ちゃんと使えば標準入出力もファイル入出力も、
あるいは圧縮・展開しながら読み書きとかいうのも
ストリームオブジェクト替えるだけでできて便利。
常に標準出力にしか書かないならprintfで十分かも。

書式指定したいときはsprintfで一度バッファに書いてから出力するか、
boost.format使うとかすればOK。

4 名前:デフォルトの名無しさん mailto:sage [2010/03/23(火) 07:01:53 ]
>>2
それはお前だけ

5 名前:デフォルトの名無しさん mailto:sage [2010/03/23(火) 07:56:19 ]
>>2
それはあなたです

6 名前:デフォルトの名無しさん mailto:sage [2010/03/23(火) 09:02:11 ]
>ストリームオブジェクト替えるだけでできて便利。

ここだろ。
大抵の場合、その恩恵授かる事が少ないから使わなくてもいいやってなる。

7 名前:デフォルトの名無しさん mailto:sage [2010/03/23(火) 09:37:12 ]
>>6
今後のために、必要条件と十分条件の違いを学習した方がいいかも

8 名前:デフォルトの名無しさん mailto:sage [2010/03/23(火) 09:43:07 ]
>>7
それはあなたです

9 名前:デフォルトの名無しさん [2010/03/23(火) 11:45:32 ]
「参照」に関する質問です。

Foo& const GetFoo();
この様な「宣言」は旧式って認識でおkでしょうか?

そして現在では
Foo& GetFoo();
に「簡略化」されているという認識でおkでしょうか?

10 名前:デフォルトの名無しさん mailto:sage [2010/03/23(火) 12:06:00 ]
いいえ。



11 名前:デフォルトの名無しさん mailto:sage [2010/03/23(火) 12:47:11 ]
>>9
どっちも×

12 名前:デフォルトの名無しさん [2010/03/23(火) 13:28:12 ]
A a;はいいのに A a();はエラーになるのはなぜですか?

13 名前:デフォルトの名無しさん mailto:sage [2010/03/23(火) 13:38:28 ]
switch(data)
{
case '+';
k = a + b;
break;
       }

でビルドするとエラーになるのはなぜ?

14 名前:デフォルトの名無しさん mailto:sage [2010/03/23(火) 13:43:15 ]
;
:

15 名前:デフォルトの名無しさん mailto:sage [2010/03/23(火) 13:44:14 ]
>>13
data, a, b, k が未定義だし、mainもないし

16 名前:デフォルトの名無しさん mailto:sage [2010/03/23(火) 13:46:18 ]
>>14
ごめん よくわからない

17 名前:デフォルトの名無しさん mailto:sage [2010/03/23(火) 13:47:19 ]
>>15
全部書いたほうがいいのね
 #include <stdio.h>
int main(void)
{
int a,b,data,k;
scanf("%d%d%d",&a,&data,&b);
switch(data)
{
case '+':
int k = a + b;
break:
}
printf("%d%d%d",a,data,b);
}

18 名前:デフォルトの名無しさん mailto:sage [2010/03/23(火) 13:50:21 ]
>>13と全然違うじゃねーかw

19 名前:デフォルトの名無しさん mailto:sage [2010/03/23(火) 13:51:59 ]
>>17をビルドしようとするとエラーを吐くって言いたかったんだ。。。すまん

20 名前:12 mailto:sage [2010/03/23(火) 13:54:56 ]
>>19
あまりこのスレで暴れないでくれるかな。
君以外にも答えを待っている人が沢山いてだね
チャットみたいに使われるとスルーされるのだよ。
自己中をなおしたまえよ。



21 名前:デフォルトの名無しさん mailto:sage [2010/03/23(火) 13:56:45 ]
>>17
int k = a + b; → k = a + b;
break: → break;

>>13
case '+'; → case '+':

22 名前:デフォルトの名無しさん mailto:sage [2010/03/23(火) 13:57:50 ]
>>17
> #include <stdio.h>
行頭に全角スペース?が入ってる

>int k = a + b;
int は不要 → k = a + b;

>break:
break の後ろがコロンに「:」になっている、セミコロン「;」とすべき

23 名前:デフォルトの名無しさん mailto:sage [2010/03/23(火) 18:21:35 ]
このスレのテンプレートに>>23入れようぜ!




24 名前:スレのテンプレート [2010/03/23(火) 18:22:26 ]
姉妹スレ

C言語なら俺に聞け(入門編)Part 61
pc12.2ch.net/test/read.cgi/tech/1267799238/
C言語初心者質問総合(だいぶ過疎っているが)
yutori7.2ch.net/test/read.cgi/pc2nanmin/1080308026/
C++相談室 part79
pc12.2ch.net/test/read.cgi/tech/1268846738/
【初心者歓迎】C/C++室 Ver.72【環境依存OK】
pc12.2ch.net/test/read.cgi/tech/1267775473/
C/C++小心者スレッドPart1
pc12.2ch.net/test/read.cgi/tech/1186262298/
【初心者歓迎】C/C++室 Ver.72【環境依存OK】
pc12.2ch.net/test/read.cgi/tech/1267775473/
Boost総合スレ part8
pc12.2ch.net/test/read.cgi/tech/1251446016/
Boost C++ Libraries Sandbox
pc12.2ch.net/test/read.cgi/tech/1250396380/

/******************************************************************/

 codepad
 ttp://codepad.org/

長いソースを貼るときはここへ!

/******************************************************************/



25 名前:デフォルトの名無しさん mailto:sage [2010/03/23(火) 18:51:20 ]
配布されてるライブラリを見ると希に->演算子や*演算子がオーバーロードされてたりしますが
こういうオーバーロードを行うとポインタ操作で不用意なバグを生み出しそうな気がするのですが大丈夫なのでしょうか?

26 名前:デフォルトの名無しさん mailto:sage [2010/03/23(火) 19:00:25 ]
>>25
それは作り方しだい。
配布するぐらいだからそれなりに作ってんじゃないの。

27 名前:デフォルトの名無しさん mailto:sage [2010/03/23(火) 19:03:25 ]
C++のクラスは、ヘッダに直接実装するのかソースに実装を分けるのか、どちらが良いでしょうか?

foo.h
class foo {
public:
  foo() {}
  void var() {
    cout << "var" << endl;
  }
};
----
foo.h
class foo {
public:
  foo();
  void var();
}

foo.cpp
foo::foo() {}
void foo::var() {
  cout << "var" << endl;
}

それぞれのメリット、デメリットってありますか?
おいらはヘッダに実装しちゃうのが簡単でよいと思ってます。

28 名前:デフォルトの名無しさん mailto:sage [2010/03/23(火) 19:13:45 ]
>>27
好きにすればいいよ。

君の場合はそのヘッダーを他人に見せるわけではないだろうし、
メモリ効率とかパフォーマンスとかも気にするレベルでもなさそうだからね。

29 名前:デフォルトの名無しさん mailto:sage [2010/03/23(火) 19:31:58 ]
>>28
おいらのレベルは置いておいて、一般的な話として
メモリ効率が悪くなり、パフォーマンスも悪くなる、ってことですか?


30 名前:デフォルトの名無しさん mailto:sage [2010/03/23(火) 19:39:53 ]
>>27
クラス定義内で実装すると inline になる。
inline でいいならそれでいいけど、
そうでないものを無理にクラス定義内で実装すると
ちょっと実装を変更しただけで
そのヘッダファイルをインクルードした全てのファイルが
再コンパイルされてしまうので、
inline にするつもりがないなら .cpp で実装した方がいい。

クラステンプレートみたいに全部ヘッダで実装する必要のあるものなら
全部クラス定義内で実装しちゃってもいいと思うけど。
inline になったからって必ずインライン展開されるわけじゃないしね。



31 名前:デフォルトの名無しさん mailto:sage [2010/03/23(火) 19:49:43 ]
>>30
すごい合点がいきました。
時々空っぽ(もしくはメンバの初期化のみ)のコンストラクタだけヘッダに実装してあって
残りがソースに実装してあるコードを見るので、どういう使い分けなんだろう、と
思ってましたが、inlineになるというので氷解しました。
おいらはJava出身なので、理由がなければヘッダに実装も書きたいんだけど
クラスの設計後、実装をソースに移すようにしてみます。


32 名前:デフォルトの名無しさん mailto:sage [2010/03/23(火) 20:05:36 ]
>>30
コンパイル時間を気にするような状況なら、プリコンパイルにするはずだから、
再コンパイルとか気にしなくていい。

33 名前:デフォルトの名無しさん mailto:sage [2010/03/23(火) 20:24:16 ]
>>32
大きなプログラム扱った事無いだろ、お前

34 名前:デフォルトの名無しさん mailto:sage [2010/03/23(火) 21:54:03 ]
template使ったことないことくらい察してやれ

35 名前:デフォルトの名無しさん mailto:sage [2010/03/23(火) 22:04:01 ]
pimplパターンとか考えられるくらい
コンパイル時間て重要なのにな
partial classが欲しいわあ

36 名前:デフォルトの名無しさん mailto:sage [2010/03/23(火) 22:57:36 ]
後学のためにboostのソース眺めてたんだが

namespace detail { struct none_helper{}; }
typedef int detail::none_helper::*none_t ;

これがなにをやってるんだかよく判らないんだけどこれどういうこと?

37 名前:デフォルトの名無しさん mailto:sage [2010/03/23(火) 23:10:51 ]
>>36
他の型に自動変換されない型を定義してる。
相談室かどっかにも同じ質問あったが同じ人か?

38 名前:デフォルトの名無しさん mailto:sage [2010/03/23(火) 23:35:03 ]
>>37
関係ない人だと思う

>他の型に自動変換されない型を定義してる。

それ以前の問題で
typedef int detail::none_helper::*none_t ;という文法からして何が言いたいのか判らない状態なのです


39 名前:デフォルトの名無しさん mailto:sage [2010/03/24(水) 00:11:52 ]
これってそんなFAQだったのかw
基本的なところから。
  typedef A a;
は「Aという型をaという名前でも使えるようにします」という意味。
  int A::*b
は「型Aのint型のメンバ変数へのポインタ b」という意味。
両方合わせて
  typedef int A::*b;
は「『型Aのint型のメンバ変数へのポインタ』の型をbという名前でも使えるようにします」となる。

メンバ変数ポインタはややこしいので使い方はぐぐってみてくれ。
とりあえず、普通のポインタと違ってNULLですら代入できないという性質がある。
このお陰で、例えば引数にNULLを渡したとしてもオーバーロードを誤判定するということがなくなる。

40 名前:デフォルトの名無しさん mailto:sage [2010/03/24(水) 00:27:20 ]
ふと思ってVCで試してみたらNULL代入できたorz
NULLも代入できないのってメンバ関数ポインタだったっけ



41 名前:デフォルトの名無しさん [2010/03/24(水) 00:28:48 ]
::*って違和感あるんだけど、↓で正しい?

class A { int x; int y; float z; } a;
class B { int x; int y; float z; } b;

int A::* p1 = &a.x; //OK
int B::* p2 = &b.x; //OK
int A::* p3 = &b.y; //NG
int B::* p4 = &a.y; //NG
float A::* p5 = &a.x; //NG
float A::* p6 = &a.z; //OK

なんで、A::int* ではなく int A::* なんだろう。変な感じ。

42 名前:デフォルトの名無しさん mailto:sage [2010/03/24(水) 00:40:36 ]
>>41
struct A { int x; int y; float z; } a;
struct B { int x; int y; float z; } b;

int A::* p1 = &A::x; //OK
int B::* p2 = &B::x; //OK
int A::* p3 = &B::y; //NG
int B::* p4 = &A::y; //NG
float A::* p5 = &A::x; //NG
float A::* p6 = &A::z; //OK

・ &a.xは通常のポインタが取得される、&A::xとしないとダメ
・ privateメンバのアドレスはクラス外からだと取れない

intだと分かりにくいけど、
A::B* と書いた場合「型Aのローカル型Bへのポインタ」と解釈される。
struct A{
 struct B{};
};

C言語からの伝統で、「ある型の変数の定義の名前の部分を*に置き換えたもの」
がその型のポインタの型になることになっている。
例: int a→int *
  int A::b→int A::*
(後者は見慣れないと思うけど、staticメンバ変数の定義のときにはこう書く)

43 名前:デフォルトの名無しさん [2010/03/24(水) 01:05:07 ]
なるほどねー

44 名前:デフォルトの名無しさん [2010/03/24(水) 01:49:28 ]
shared_ptrとunique_ptrはどう使い分けますか?

全部shared_ptrじゃ、ダメなんですか。

45 名前:デフォルトの名無しさん mailto:sage [2010/03/24(水) 02:09:21 ]
>>44
実行速度が気にならないなら全部shared_ptrで構わない。
shared_ptrを使った場合はプログラマが1個のshared_ptrからしか参照されないことを知っていたとしても
毎回参照カウンタを生成するため、そのためのオーバーヘッドが生じる。
unique_ptrは参照カウンタを使用しないため、1つからしか参照されないことが予め分かっているなら効率的。

また、shared_ptrの場合、一度ポインタをshared_ptrに格納してしまうとポインタの所有権を奪い返すことができない。
つまり参照するshared_ptrがなくなった時点でオブジェクトがdeleteされるのを止めることができない。
一方で、unique_ptrはrelease()によって所有権を放棄させることができる。

ぱっと思いつくのはこのくらい。

46 名前:デフォルトの名無しさん mailto:sage [2010/03/24(水) 03:04:54 ]
win32でピルドできる?

Google、高速・低メモリ消費の正規表現ライブラリ「RE2」を公開 ...
sourceforge.jp/magazine/10/03/15/0331223


もし誰も挑戦してみたいの試行RE2 Windows上でコンパイルするには、パッチを歓迎するだろうなされている。
どのようにre2/re2.hの上部にあるコメントを参照してくださいRE2、使用方法に関するドキュメントしてください。
code.google.com/p/re2/wiki/Install
No attempt has been made to make RE2 compile on Windows, but if anyone would like to try, patches would be welcomed.
For documentation on how to use RE2, see the comment at the top of re2/re2.h.

47 名前:デフォルトの名無しさん mailto:sage [2010/03/24(水) 09:17:07 ]
endlみたいに空の()を省きたいが、マニピュレータではない関数を作ってみたいんですけど、
分かりやすいサイトもしくはサンプルもしくは検索語無いですかね?

48 名前:デフォルトの名無しさん mailto:sage [2010/03/24(水) 11:34:19 ]
ttp://soudan1.biglobe.ne.jp/qa3450940.html

この質問者ではないんだけど、やりたいこととしては

typedef unsigned int UINT;

が定義されていなければ自分で定義したい。

擬似コードとしては以下のような感じ。

#ifndef UINT
typedef unsigned int UINT;
#endif

冒頭の URL は実行時に判定しているけど(それはそれですばらしい)
やりたいのはコンパイル時です。


49 名前:デフォルトの名無しさん mailto:sage [2010/03/24(水) 12:03:41 ]
>>48
OKWaveの回答者はなにやら勘違いしているようだけど、あるかないかはエラーかどうかで判断できる。
なので、コンパイルしてみてエラーになったら定義すればいい。
逆に言えば、汎用的な手段で判定することはできないので悪足掻きするだけ無駄。

50 名前:デフォルトの名無しさん mailto:sage [2010/03/24(水) 12:14:51 ]
template<typename T=unsigned>struct mkUINT{typedef T UINT;};
#define mkUINT() typedef mkUINT<UINT>::UINT UINT;
mkUINT()



51 名前:デフォルトの名無しさん mailto:sage [2010/03/24(水) 12:38:46 ]
>>48
そこの回答だと
namespace fuga { typedef unsigned int UINT; }
using namespace fuga;
を加えるとエラーになるよね

52 名前:デフォルトの名無しさん mailto:sage [2010/03/24(水) 12:43:10 ]
>>45 誤解されがちなshared_ptrに補足
引数でshared_ptrを渡したいときは const shared_ptr<hoge>& とすればコピーのオーバーヘッドは発生しないし。
->は参照カウントと変更しないからオーバーヘッドはないよ。
new に対するshared_ptrのコストは無視できる。
まあ、大抵のshared_ptrのコストは無視できるよ。ホントにボトルネックになったときに考えればいい。


53 名前:デフォルトの名無しさん mailto:sage [2010/03/24(水) 16:12:35 ]
>>52
const でもカウントアップされないと困る場合もあると思うけど。

54 名前:デフォルトの名無しさん mailto:sage [2010/03/24(水) 18:30:37 ]
どんなとき?

55 名前:デフォルトの名無しさん mailto:sage [2010/03/24(水) 18:39:48 ]
カウントしておかないと実態が解放されちゃうことがあるよ。
これが起こるはずがないというのは本末転倒。

元々その辺の管理をやらなくていいようにするための物なんだから。

56 名前:デフォルトの名無しさん mailto:sage [2010/03/24(水) 18:47:28 ]
const参照の参照元が掴んでるから平気じゃね。
必要に応じてコピーすればいいし

57 名前:デフォルトの名無しさん mailto:sage [2010/03/24(水) 18:48:23 ]
別スレッドに渡すと死ぬる

58 名前:デフォルトの名無しさん mailto:sage [2010/03/24(水) 18:50:01 ]
スタック上にchar[sizeof]で確保した領域に
別の型のオブジェクトをplacement newするのは危険、と小耳に挟んだんだけど本当?

59 名前:デフォルトの名無しさん mailto:sage [2010/03/24(水) 18:52:20 ]
ヒープであっても危険

60 名前:デフォルトの名無しさん mailto:sage [2010/03/24(水) 18:57:04 ]
>>56
だからずーと掴んでおく必要がないのが shared_ptr でしょうに。



61 名前:デフォルトの名無しさん mailto:sage [2010/03/24(水) 19:00:24 ]
>>58
char[sizeof]を宣言してる関数から抜けたら駄目でしょう。
別に placement new だからというわけでもないと思うけど。

62 名前:デフォルトの名無しさん mailto:sage [2010/03/24(水) 19:03:53 ]
>>61
関数を抜けなければ大丈夫とお思い?
d.hatena.ne.jp/Cryolite/20051102

63 名前:デフォルトの名無しさん mailto:sage [2010/03/24(水) 19:10:12 ]
>>61
オブジェクトのメンバにchar[sizeof]で確保されたメンバがあって、オブジェクト自体が自動変数だった場合を想定してます。

>>62
それを呼んでもどういう場合が危険でどう回避すればいいか解らないあたりc++に対する理解度が低いのかなと・・・

64 名前:デフォルトの名無しさん mailto:sage [2010/03/24(水) 19:14:43 ]
>>62
それは処理系から来る制限であり、元の仕様とは関係ない。

問題のある処理系ではそのようなコードを書かないのは当たり前のこと。
逆にメモリ管理を上書きしたいんだから、その辺のことを考慮するのは当然だろ。

65 名前:デフォルトの名無しさん mailto:sage [2010/03/24(水) 19:18:46 ]
>>63
>危険でどう回避すればいいか解らないあたりc++に対する理解度が低いのかなと・・・

わからない人が使うものではないと思いますが、使う理由は何ですか?

66 名前:デフォルトの名無しさん mailto:sage [2010/03/24(水) 20:19:29 ]
>>64
話がずれてるだろお前

67 名前:デフォルトの名無しさん mailto:sage [2010/03/25(木) 09:41:55 ]
char name[MAX_PATH] = "";
nameを\0で、埋め尽くしたい場合にどう記述すれば良いのでしょう。


68 名前:デフォルトの名無しさん mailto:sage [2010/03/25(木) 10:06:16 ]
その書き方で全部'\0'で埋まってないか?

69 名前:デフォルトの名無しさん mailto:sage [2010/03/25(木) 10:19:54 ]
>>67
最初だけで良いなら static を付けて宣言する

それか
memset(name, '\0', MAX_PATH);
で毎回クリアするとか

70 名前:デフォルトの名無しさん mailto:sage [2010/03/25(木) 10:21:25 ]
>>67
char name[MAX_PATH] = {'/0'};



71 名前:デフォルトの名無しさん mailto:sage [2010/03/25(木) 10:22:05 ]
訂正
/0じゃなくて\0ね。

72 名前:67 mailto:sage [2010/03/25(木) 10:41:55 ]
初期宣言時   char name[MAX_PATH] = {'\0'};
変数クリア時  memset(name, '\0', MAX_PATH);

解決しました、ありがとうございます。

73 名前:デフォルトの名無しさん mailto:sage [2010/03/25(木) 14:26:32 ]
Modern C++ Designにpointeeって出てきたんですけどこれって何者なんですか?pointerの誤植じゃないですよね?

74 名前:デフォルトの名無しさん mailto:sage [2010/03/25(木) 14:43:36 ]
employ 【動】雇用する
employer 【名】雇用主
employee 【名】従業員
とか言うのと同じ

75 名前:デフォルトの名無しさん mailto:sage [2010/03/25(木) 14:48:29 ]
ポインタが示す先ってこと?

76 名前:デフォルトの名無しさん mailto:sage [2010/03/25(木) 14:51:42 ]
int pointee;
int *pointer = &pointee;

77 名前:デフォルトの名無しさん mailto:sage [2010/03/25(木) 14:55:01 ]
>>72
memset(name, '\0', sizeof name); の方がよくない?

78 名前:デフォルトの名無しさん mailto:sage [2010/03/25(木) 14:58:42 ]
マクロ定数で決まってる配列のサイズを、sizeofにわざわざ変える必要はない。

79 名前:デフォルトの名無しさん mailto:sage [2010/03/25(木) 15:46:16 ]
メッセージを表示させて時間が来たら消します

i= MessageBox(hwnd, Message, Title, MB_OK);
Set timer
時間経過→ SendMessage(?,WM_KEYDOWN,VK_RETURN,0);
Killtimer

SendMessageでMessageBoxにエンター入力して表示を消すつもりです。
WM_KEYDOWNにVK_RETURNを送るとエンターの入力になりますよね?
また、MessageBoxのハンドルをどうやって所得すればよいのか解りません。


80 名前:デフォルトの名無しさん mailto:sage [2010/03/25(木) 15:48:39 ]
スレチ



81 名前:デフォルトの名無しさん mailto:sage [2010/03/25(木) 15:54:32 ]
>>79
MessageBox 使わず、自分で CreateDialog すればいいじゃん。
SendMessage は控えよう!

82 名前:79 mailto:sage [2010/03/25(木) 16:18:07 ]
API向けのスレでした…すみません。
CreateDialogも調べてみます。

83 名前:デフォルトの名無しさん mailto:sage [2010/03/25(木) 16:47:35 ]
>>74,76
thxです

84 名前:デフォルトの名無しさん mailto:sage [2010/03/25(木) 21:32:49 ]
カンマ区切りの文字列sがあったとして

foo(strtok(s, ","), strtok(NULL, ","), strtok(NULL, ","));

なんて呼び出しをしたいんだけど、strtok は第一引数の場所から
順番に呼び出されるって保証がありますか?

85 名前:デフォルトの名無しさん mailto:sage [2010/03/25(木) 21:34:34 ]
無い

86 名前:デフォルトの名無しさん mailto:sage [2010/03/25(木) 21:34:40 ]
ない

87 名前:デフォルトの名無しさん mailto:sage [2010/03/25(木) 21:36:03 ]
ない

実際の実装ではむしろ逆から呼ばれる傾向にある
(後ろの引数からスタックに詰むため)
これも必ずそうというわけではないが

88 名前:デフォルトの名無しさん mailto:sage [2010/03/25(木) 21:40:22 ]
>>85-87
面倒でもいったん変数に取り出す必要があるんですね。
どうもです。

89 名前:デフォルトの名無しさん mailto:sage [2010/03/25(木) 23:37:22 ]
fopen("1.txt",fp)後に while (fgets(s, 256, fp) != NULL) {Line++}で行数を読み込みます。
Lineが100あり、30行目の内容を読み込みたい時ですが、

int a=30,Line=0;
while (fgets(s, 256, fp) != NULL) {
Line++
if(Line=a) 適当な関数(s);


上の記述だと1〜30まで繰り返しますが、ダイレクトに30行目を読み込む方法ってあります?

for()

90 名前:デフォルトの名無しさん mailto:sage [2010/03/26(金) 00:30:22 ]
1行の長さが不定なら前から見ていくしかないよ



91 名前:デフォルトの名無しさん [2010/03/26(金) 02:40:50 ]
BOOLEAN BOOL boolean bool
どれ使えばいいの?(´;ω;`)

92 名前:デフォルトの名無しさん mailto:sage [2010/03/26(金) 03:06:31 ]
BOOLかbool

93 名前:デフォルトの名無しさん mailto:sage [2010/03/26(金) 06:25:42 ]
ありがとう

94 名前:デフォルトの名無しさん mailto:sage [2010/03/26(金) 10:41:27 ]
>>89
そのソースだと全行で関数が呼び出されるぜw

95 名前:デフォルトの名無しさん mailto:sage [2010/03/26(金) 10:45:48 ]
algorithmのstd::remove()について質問です。

std::vector<int> v;
v.push_back(0);
v.push_back(1);
v.push_back(2);
std::remove(v.begin(), v.end(), 0);
std::remove(v.begin(), v.end(), 1);
printf("%d", v.size());

上記のようにすると、最後のvのサイズは1を期待するのですが3のままです。
でも、v[0]には本来の0ではなく2が入っています。
v[1]もv[2]も2が入っています。

std::remove()の代わりにvector::erase()を使用すれば、
v.size()は1を返します。

std::remove()はそういうモノなのでしょうか?

VC2008で確認しています。




96 名前:デフォルトの名無しさん mailto:sage [2010/03/26(金) 10:55:20 ]
>>95
そうです
期待通りの動作をさせるには

v.erase(std::remove(v.begin(), v.end(), std::compose2(
std::logical_or<bool>(),
std::bind2nd(std::equal_to<int>, 0),
std::bind2nd(std::equal_to<int>, 1)))

とする必要があります

97 名前:デフォルトの名無しさん mailto:sage [2010/03/26(金) 10:57:09 ]
あ、ごめん

v.erase(std::remove(v.begin(), v.end(), std::compose2(
std::logical_or<bool>(),
std::bind2nd(std::equal_to<int>, 0),
std::bind2nd(std::equal_to<int>, 1)),
v.end())

だった
removeは残す要素の候補を前に集めるだけで、実際の削除は
しませんのでstd::eraseもしくはメンバ関数eraseを使います

98 名前:デフォルトの名無しさん mailto:sage [2010/03/26(金) 11:18:20 ]
>>97
erase 使うのならそんな面倒なことせず
remove を erase に置き換えれば良いだけだと思うけど。

99 名前:デフォルトの名無しさん mailto:sage [2010/03/26(金) 11:56:46 ]
v.erase(std::remove(v.begin(), v.end(), 0), v.end());
v.erase(std::remove(v.begin(), v.end(), 1), v.end());

これでいいね
removeは第三引数にリファレンスを取るのでlogical_orが使えないな

100 名前:デフォルトの名無しさん mailto:sage [2010/03/26(金) 12:00:18 ]
使うとしたらremove_ifとboost::bindを組み合わせるかだ








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

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

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