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


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

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



1 名前:デフォルトの名無しさん [2011/09/15(木) 00:17:43.25 ]
スレを勃てるまでもない低俗なC/C++の質問はここでお願いします。

過去ログ
01 pc11.2ch.net/test/read.cgi/tech/1167476845/
02 pc11.2ch.net/test/read.cgi/tech/1178503366/
03 pc11.2ch.net/test/read.cgi/tech/1187521676/
04
pc11.2ch.net/test/read.cgi/tech/1221633708/
05 pc11.2ch.net/test/read.cgi/tech/1230516307/
06 pc11.2ch.net/test/read.cgi/tech/1231564903/
07 pc11.2ch.net/test/read.cgi/tech/1232983248/
08 pc12.2ch.net/test/read.cgi/tech/1235921779/
09 pc12.2ch.net/test/read.cgi/tech/1240022781/
10 pc12.2ch.net/test/read.cgi/tech/1242300936/
11 pc12.2ch.net/test/read.cgi/tech/1245059383/
12 pc12.2ch.net/test/read.cgi/tech/1248010352/
13 pc12.2ch.net/test/read.cgi/tech/1260842197/
14 pc12.2ch.net/test/read.cgi/tech/1269273471/
15 pc12.2ch.net/test/read.cgi/tech/1273368706/
16 hibari.2ch.net/test/read.cgi/tech/1279285647/
17 hibari.2ch.net/test/read.cgi/tech/1285115590/
18 hibari.2ch.net/test/read.cgi/tech/1291571263/
19
hibari.2ch.net/test/read.cgi/tech/1308106024/

2 名前:デフォルトの名無しさん [2011/09/15(木) 16:27:52.49 ]


3 名前:デフォルトの名無しさん [2011/09/15(木) 17:05:51.53 ]
Cはヨーグルトの味がしますか?

4 名前:デフォルトの名無しさん mailto:sage [2011/09/16(金) 00:22:38.87 ]
Cは醍醐味

5 名前:デフォルトの名無しさん mailto:sage [2011/09/16(金) 05:25:30.11 ]
白かよ、青かよ、ウォッシュかよ?


6 名前:デフォルトの名無しさん mailto:sage [2011/09/16(金) 07:26:08.22 ]
>>5
喰える、喰えない、割と好き

7 名前:デフォルトの名無しさん mailto:sage [2011/09/17(土) 11:39:07.68 ]
ちょっと和んだw

8 名前:デフォルトの名無しさん mailto:sage [2011/09/21(水) 08:06:04.88 ]
質問です。VC++ 2008 Express で
ttp://k3tec.net/neko_wiki/index.php?C%2FC%2B%2B%A5%BD%A5%B1%A5%C3%A5%C8%A5%D7%A5%ED%A5%B0%A5%E9%A5%DF%A5%F3%A5%B0%C2%E8%B0%EC%B2%F3
を参考にサーバ・クライアントプログラムを作っているのですが、実行すると
server.exe の 0x85c7ec4d でハンドルされていない例外が発生しました: 0xC0000005: 場所 0x85c7ec4d を読み込み中にアクセス違反が発生しました。
というエラーが出て困っています。Segmentation Fault だと思うのですが、簡単なテストプログラムではエラーが出ないので原因がよくわかりません。
対処方法がわかる方いましたらご教示ください。
以下、ソース
#include <iostream>
#include <winsock2.h>
#include <ws2tcpip.h>
using namespace std;
enum COMMAND { CMD_NOP, CMD_LOGIN, ....... };

9 名前:つづき mailto:sage [2011/09/21(水) 08:06:20.37 ]
class Message {
SOCKET _dst_socket;
COMMAND _command;
public:
// コンストラクタ、デストラクタ、セッタ、ゲッタ
...
virtual int sizeOf() cosnt { return sizeof( *this ); }
};

class TextMessage : public Message {
char _text[ 16 ];
public:
// コンストラクタ、デストラクタ、セッタ、ゲッタ
...
virtual int sizeOf() const { return sizeof( *this ) }
};

class Server{ ... };
bool Server::send( SOCKET dst_socket, const Message& msg ) {
if( ::send( dst_socket, (char*) &msg, msg.sizeOf(), 0 ) != SOCKET_ERROR ) // このへんで sizeOf() を呼ぶとエラー。sizeof( TextMessage ) とかだとOK
}

class Tester {
public:
static void test( const Message& msg ) { cout << msg.sizeOf() << endl; }
};

int main() {
TextMessage tmsg;
Tester::test( tmsg ); // これはOK
...
}

10 名前:デフォルトの名無しさん mailto:sage [2011/09/21(水) 08:12:50.28 ]
sizeOf()を呼ぶとエラーじゃなくて、sizeOf()を呼んだ後の次のsizeOf()で死ぬんだろ。
それなら原因は想定できた。



11 名前:デフォルトの名無しさん mailto:sage [2011/09/21(水) 08:15:04.46 ]
こいつはくせえーッ!Java厨のにおいがプンプンするぜッーーーッ!

12 名前:8 mailto:sage [2011/09/21(水) 09:06:04.18 ]
>>10 ヒントだけでもお願いします。
ついでにJava厨臭くない方法があったら教えて下さい。

13 名前:デフォルトの名無しさん mailto:sage [2011/09/21(水) 09:34:10.54 ]
>>9
それが>10の言いたいことかどうかは知らんが、(char *) & msgはsend()に渡すべき場所を指しているかデバッガでよく見てみたら?
つーか、Cスタイルキャストは使うなや。

14 名前:デフォルトの名無しさん mailto:sage [2011/09/21(水) 14:24:19.16 ]
広域の::send()関数の引数に、Messageクラスのポインタを(char*)にキャストして
渡してまともに動作するものなのか?
TextMessageの場合は、たまたまクラスの銭湯に_test[16]があれば動作するかも知れないが…

15 名前:8 mailto:sage [2011/09/21(水) 14:27:30.20 ]
自己解決しました。
クライアントから送られてきたデータをそのまま流用しようとしたため sizeOf のアドレスが異なっていたようです。
char data[ SIZE ];
recv( src_socket, data, _countof( data ), 0 );
TextMessage tmp, msg;
memcpy_s( &tmp, sizeof( TextMessage ), data, sizeof( TextMessage ) );
msg = tmp;
server.send( dst_socket, msg );
としたらうまくいきました。
情報不足の質問をしてすみませんでした。アドバイスくださった方、ありがとうございました。

16 名前:8 mailto:sage [2011/09/21(水) 14:35:44.97 ]
あ、sizeOf のアドレスじゃないや。まあいいや

17 名前:デフォルトの名無しさん mailto:sage [2011/09/22(木) 00:48:42.18 ]
アドバイスを受けて事故解決かよ。おめでてーな。

18 名前:デフォルトの名無しさん mailto:sage [2011/09/22(木) 11:31:13.74 ]
以下のような宣言に対して…

template< class T1 >
class CHoge
{
void f1();
template< class T2 > void f2();
};

f1(),f2()の定義を宣言と分けて書きたい場合,f1()は,
template< class T1 > void CHoge< T1 >::f1(){ ... }
と書きますが,
f2()の実装はどのように書けばよいのでしょうか?

19 名前:デフォルトの名無しさん mailto:sage [2011/09/22(木) 14:27:06.20 ]
template <class T1> template <class T2> void CHoge<T1>::f1<T2>() { ... }


20 名前:デフォルトの名無しさん mailto:sage [2011/09/22(木) 14:36:30.97 ]
エラーが出ます

template <class T1>
class CHoge {
T1 t;
void f1();
template <class T2> void f2();
public:
CHoge(T1 x) : t(x) {}
};

template <class T1>
void CHoge<T1>::f1() {
std::cout << t << std::endl;
}

template <class T1>
template <class T2>
void CHoge<T1>::f2<T2>() {
std::cout << static_cast<T2>(t) << std::endl;
}

error: function template partial specialization 'f2<T2>' is not allowed



21 名前:デフォルトの名無しさん mailto:sage [2011/09/22(木) 14:39:24.95 ]
template <class T1> template <class T2> void CHoge<T1>::template f2<T2>() { ... }


22 名前:デフォルトの名無しさん mailto:sage [2011/09/22(木) 14:43:18.70 ]
>>21
>>20と同じエラーが出ます

23 名前:デフォルトの名無しさん mailto:sage [2011/09/22(木) 14:55:45.20 ]
template <class T1> template <class T2> void CHoge<T1>::template f2() { ... }


24 名前:デフォルトの名無しさん mailto:sage [2011/09/22(木) 15:00:15.12 ]
>>23
ありがとうございます

template <class T1>
class CHoge {
T1 t;
public:
void f1();
template <class T2> void f2();
CHoge(T1 x) : t(x) {}
};

template <class T1>
void CHoge<T1>::f1() {
std::cout << t << std::endl;
}

template <class T1>
template <class T2>
void CHoge<T1>::f2() {
std::cout << static_cast<T2>(t) + 0.5 << std::endl;
}

int main()
{
CHoge<int> c(1);

c.f1();
c.f2<double>();
}

25 名前:18 mailto:sage [2011/09/22(木) 15:49:42.60 ]
>>19〜24 感謝.

26 名前:デフォルトの名無しさん mailto:sage [2011/09/22(木) 19:13:14.04 ]
計算式の入った文字列("1+2*3"など)を用意しておいて、その計算結果(先程の例では7)を変数に代入するみたいなことって出来ますか?

27 名前:デフォルトの名無しさん mailto:sage [2011/09/22(木) 19:32:01.78 ]
>>26
自分でパーサー書けば出来る


28 名前:デフォルトの名無しさん mailto:sage [2011/09/22(木) 19:59:16.78 ]
>>26
Lua使えば1分でそういうコードが書けるよ

29 名前:デフォルトの名無しさん mailto:sage [2011/09/23(金) 01:57:41.81 ]
boostでなかったっけ

30 名前:デフォルトの名無しさん [2011/09/26(月) 13:40:15.69 ]
L"abc"のLって何ですか?
一文字なのでぐぐれなくて困っています。




31 名前:デフォルトの名無しさん mailto:sage [2011/09/26(月) 13:44:45.38 ]
>>30
ワイド文字

32 名前:デフォルトの名無しさん mailto:sage [2011/09/26(月) 18:51:14.14 ]
「C言語 文字列 L」でぐぐったら一発だったが

33 名前:デフォルトの名無しさん mailto:sage [2011/09/26(月) 19:17:29.98 ]
X a(),b(),c(),d();

if(is_true) return;

Y e();
} → if(!is_true)e.~e();→ d.~d();→ c.~c();→ b.~b();→ a.~a();

RAIIは開放の順番は規定されてるの?
それとも順不同?

34 名前:デフォルトの名無しさん mailto:sage [2011/09/26(月) 19:59:55.36 ]
>>33
X a()は返却値X型で引数をとらない関数aの宣言で解放もなにもないし
変数の構築と破棄の順序関係はRAIIなんかとは直接関係ない変数に関する普通の話だしでつっこみどころしかない。
最低限の知識が正しく身についてない人にはそれより先は教えようがないぞ。

35 名前:デフォルトの名無しさん mailto:sage [2011/09/26(月) 20:13:36.69 ]
>>33
規定されてるよ

>>34
struct A{};
A a();

36 名前:デフォルトの名無しさん mailto:sage [2011/09/26(月) 21:54:42.25 ]
デストラクタコール記述のつもりだろうが変数名でデストラクタ書いてるwwから
生兵法君が鼻息荒げて訳判らん(キリッしちゃったんだろうな

37 名前:デフォルトの名無しさん [2011/09/27(火) 21:03:18.94 ]
もう何度も質問されていると思いますので簡潔にでいいのでお答えいただけないでしょうか?
PHPやJavaScriptは習得しているのですが、ちょっとC系が必要になりそうなのです
その際、C -> C++と学習したほうがやはりいいのでしょうか?
CはC++に吸収済みとか言う人もいるようですが
オブジェクト指向に関しましてはまぁ少々は慣れていると思います
やはりC++をいきなりというのはつまずく点が多いのでしょうか?
また、CとC++はオブジェクト指向以外にも違いはあるのでしょうか?
Webで調べたのですがいまいち分かりませんでした


38 名前:デフォルトの名無しさん mailto:sage [2011/09/27(火) 21:15:01.97 ]
>>37
必要な言語を学習したんでいい。C++が必要なら最初からそっちでおk
Cにオブジェクト指向とテンプレート(ジェネリックプログラミング)、例外を加えたのがC++だな

39 名前:デフォルトの名無しさん mailto:sage [2011/09/27(火) 21:25:22.74 ]
ご回答ありがとうございます
>必要な言語を学習したんでいい
とはPHP等のオブジェクト指向を学習しているので、そのままC++にいってもいいという意味でしょうか?
Cで出来ることはC++で出来ると聞いていますので、C++に行こうかと思いました

40 名前:デフォルトの名無しさん mailto:sage [2011/09/27(火) 21:59:07.32 ]
>>39
仕事でも趣味でも受験でも、目的があるならそれに沿った言語を選択して学習すればいい。
学習そのものが目的なら自分で調べて悩んで下さい。学習になります。



41 名前:デフォルトの名無しさん mailto:sage [2011/09/27(火) 22:22:48.68 ]
>>37
CとC++の肝はメモリー管理。
どちらからやっても同程度に壁になる

42 名前:デフォルトの名無しさん mailto:sage [2011/09/27(火) 23:08:30.45 ]
日頃C++をバリバリ使ってると、Cの仕事は苦痛。
日頃Cをバリバリ使ってると、C++の仕事は苦痛。

その程度には違うので、C系なんてごまかしてないで、
プロジェクトに必要な方をやるべし。両方必要なら迷わずC++。


43 名前:デフォルトの名無しさん mailto:sage [2011/09/28(水) 10:13:54.66 ]
設計がしっかりしてればどっちでやっても大差ない

44 名前:デフォルトの名無しさん mailto:sage [2011/09/28(水) 13:08:19.61 ]
アルゴリズムの話なのですが、
手続き型言語でコールバックは悪ってのは何故なんでしょうか。

45 名前:デフォルトの名無しさん mailto:sage [2011/09/28(水) 13:10:23.06 ]
悪じゃないです

46 名前:デフォルトの名無しさん mailto:sage [2011/09/28(水) 13:44:47.44 ]
純粋な手続き型ではA-B-C-D-Eという流れなら毎回A-B-C-D-Eの順で処理が進んでいくけど
コールバックが入るとA(ハンドラ登録)-コールバック-B-C-D-Eだったり
A(ハンドラ登録)-B-C-D-E-コールバックだったりと処理の順序関係が安定しなくなる、
あるいは順序を安定させようとするとマルチプロセス化や待機状態を作るなどの
純粋な手続き型と比べると余計なコストがかかるなどで相性が悪いから。

47 名前:44 mailto:sage [2011/09/28(水) 18:57:01.56 ]
>>46
なるほど、ありがとうございました。

48 名前:デフォルトの名無しさん mailto:sage [2011/09/28(水) 19:37:53.90 ]
assertってやめたほうが良くないですか?
デバッグ時に発生しなかったバグケースがリリース時に出たら困りますよね


49 名前:デフォルトの名無しさん mailto:sage [2011/09/28(水) 19:49:24.57 ]
>>48
assert使った事ないの?

50 名前:デフォルトの名無しさん mailto:sage [2011/09/28(水) 19:51:34.90 ]
>>49
リリース時に例外を投げるassertもどきなら使ってます
ボトルネックでは仕方ないからassertですが…



51 名前:デフォルトの名無しさん mailto:sage [2011/09/28(水) 19:53:58.32 ]
リリースビルドの意味わからなかったり直接呼んだりしてるなら
ディスパッチャーの中で発生させるアラートや事後アラートがバレると
IQの低さを悟られてしまうから止めといたほうがイイとおもうよ

52 名前:デフォルトの名無しさん mailto:sage [2011/09/28(水) 19:58:18.01 ]
煽りはレスしなくて結構です

53 名前:デフォルトの名無しさん mailto:sage [2011/09/29(木) 00:38:50.35 ]
すでにある構造体(コンストラクタなしの型)のテンポラリオブジェクトを無駄なく構築するにはどうすればいい?
func(hoge(1, 2));
というふうな書き方ができないから
{ hoge h(1, 2); func(h); }
と書いてるんだけど、ダサすぎて困る

54 名前:デフォルトの名無しさん mailto:sage [2011/09/29(木) 00:46:48.17 ]
>>53
C++ならコンストラクタを書く
CならC99のコンパウンドリテラルを使う
C89はどうしようもない

55 名前:デフォルトの名無しさん mailto:sage [2011/10/01(土) 17:55:42.79 ]
printf("%s %d", "hoge", x);
な所が
printf("hoge", "hoge", x);
こうなるケースがあっても問題ない?

56 名前:デフォルトの名無しさん mailto:sage [2011/10/01(土) 18:03:28.62 ]
初心者には意味不明な質問だな

57 名前:デフォルトの名無しさん mailto:sage [2011/10/01(土) 18:36:14.12 ]
多いのは問題あるが少ないのは問題ない

58 名前:デフォルトの名無しさん mailto:sage [2011/10/01(土) 19:08:08.85 ]
ファイルから文字列を読み込んで,その文字列を名前にもつ関数を呼び出す事ってC,もしくはC++で可能なんでしょうか
例えば func,100 とだけ書かれたファイルを読み込んで,func(100)という風に呼び出したいのです

59 名前:デフォルトの名無しさん mailto:sage [2011/10/01(土) 19:19:48.85 ]
if(strcmp(str, "func") == 0)
{
  func(num);
}

60 名前:デフォルトの名無しさん mailto:sage [2011/10/01(土) 19:38:38.90 ]
void hoge(void) { std::cout << "hoge" << std::endl; }
void fuga(void) { std::cout << "fuga" << std::endl; }

map<string, void (*)(void)> m;
m["hoge"] = hoge;
m["fuga"] = fuga;

string s;
cin >> s;

map<string, void (*)(void)>::iterator i(m.find(s));
if(i != m.end()) { (*i)(); }




61 名前:デフォルトの名無しさん mailto:sage [2011/10/01(土) 19:42:25.38 ]
あらかじめ用意した関数しか呼び出せねえのかこの糞ゲーは

62 名前:デフォルトの名無しさん mailto:sage [2011/10/01(土) 19:46:40.08 ]
用意してないものを利用できると思うほうがおかしい

63 名前:デフォルトの名無しさん mailto:sage [2011/10/01(土) 20:00:11.71 ]
>>59
ありがとうございます
たぶん,これでもやろうとしてることは出来ないことはないんですが
全部の関数でそれをするのはちょっと辛いなあと思ってたんです
言葉足らずですいません

>>60
C++はまだ勉強中なのでよくわからないのですが,おそらくイメージしてたのはこれです
mapとか言うのを調べればよさそうな感じですね
勉強になりました

お二方,ありがとうございました

64 名前:デフォルトの名無しさん mailto:sage [2011/10/03(月) 22:58:54.79 ]
以下のプログラムで実行結果を「ABC」にしたいのですが「ABCBCC」になってしまいます
どうすればいいですかね・・・

#include<stdio.h>
int main()
{
int i;
char c[100]={'A','B','C'};

for(i=0;i<3;i++)
printf("%s",&c[i]);

printf("\n");
}

65 名前:デフォルトの名無しさん mailto:sage [2011/10/03(月) 23:02:34.67 ]
%sを%cにする?

66 名前:デフォルトの名無しさん mailto:sage [2011/10/03(月) 23:05:19.91 ]
s->c

67 名前:デフォルトの名無しさん mailto:sage [2011/10/03(月) 23:11:29.79 ]
>>65
%cにしたら出力が「???」になりました

68 名前:デフォルトの名無しさん mailto:sage [2011/10/03(月) 23:14:04.75 ]
printf("%c",c[i]);

69 名前:デフォルトの名無しさん mailto:sage [2011/10/03(月) 23:15:41.95 ]
プリントは&いらん

70 名前:デフォルトの名無しさん mailto:sage [2011/10/03(月) 23:16:03.02 ]
>>67
申し訳ない
>>68が正解だな



71 名前:デフォルトの名無しさん mailto:sage [2011/10/03(月) 23:17:43.86 ]
>>68-69
できました!ありがとうございます
&はscanfと混同してました・・・初歩的なミスでしたね^^;

72 名前:デフォルトの名無しさん [2011/10/04(火) 18:16:34.85 ]
Boost pythonを使用しようとして
d.hatena.ne.jp/moriyoshi/20091214/1260779899
を参考にしているのですが、vector<int>からpythonのリストへの変換例のコードの意味がわかりません。
参考URL中の

.def("__getitem__", (int const&(foo::int_vector::*)(foo::int_vector::size_type) const)&foo::int_vector::at)

の中で(int const&以下が何をやっているのでしょうか。さっぱり理解できません。

73 名前:デフォルトの名無しさん mailto:sage [2011/10/04(火) 19:56:17.57 ]
>>72
foo::int_vector::at へのメンバ関数ポインタを取得するために、
返却値型 int const & で引数は一つで型は foo::int_vector::size_type で const 修飾されてる foo::int_vector のメンバ関数の
メンバ関数ポインタ型へ明示的なキャストをしてる。

74 名前:デフォルトの名無しさん [2011/10/04(火) 20:22:34.44 ]
>>73
ありがとうございます。
関数キャストは
(返却値型 (ポインタ型)(引数リスト) )
の形式で行うということですね。

75 名前:デフォルトの名無しさん mailto:sage [2011/10/04(火) 21:16:27.46 ]
なんか正しくわかってないような?
・メンバ関数ポインタ
・オーバーロードされてる(メンバ)関数への(メンバ)関数ポインタの取得
についてわかってるならそれでいいよ

76 名前:デフォルトの名無しさん [2011/10/06(木) 01:12:52.40 ]
vectorの各要素を<algorithm>を使って3乗するとして、

案1
class MyPow {
pulic:
  double operator() (double value){return pow(value, a_)
  MyPow(double a):a_(a)
private:
  double a_;
}

transform(vec.begin(), vec.end(), vec.begin(), MyPow(3.0));


案2
class MyPow: public binary_func<double, double, double> {
  double operator() (double value, double a) {return pow(value,a);}
}

transform(vec.begin(), vec.end(), vec,begin(), bind2nd(MyPow(), 3.0))

どちらの方が好ましいのでしょうか。どちらでもOK?

77 名前:デフォルトの名無しさん mailto:sage [2011/10/06(木) 01:15:48.59 ]
>>76
どちらも単なる関数オブジェクトだから大差ないんじゃね?
強いて言えば案1の方が3.0を内部状態として持つのでそれだけ引数の
受け渡しが減る

78 名前:デフォルトの名無しさん mailto:sage [2011/10/06(木) 01:48:04.60 ]
const int n = 10;

int main()
{
std::vector<double> vec;

for (int i = 0; i < n; i++)
vec.push_back(std::rand() % 100);

std::copy(vec.begin(), vec.end(), std::ostream_iterator<double>(std::cout, " "));
std::cout << std::endl;

std::transform(vec.begin(), vec.end(), vec.begin(), [](double& x) { return std::pow(x, 3.0); });

std::copy(vec.begin(), vec.end(), std::ostream_iterator<double>(std::cout, " "));
std::cout << std::endl;
}

79 名前:デフォルトの名無しさん mailto:sage [2011/10/06(木) 02:04:54.23 ]
やっぱりラムダ入ったのは大きいよなぁ

80 名前:デフォルトの名無しさん mailto:sage [2011/10/06(木) 02:19:35.41 ]
mem_fun_ref(笑)



81 名前:デフォルトの名無しさん mailto:sage [2011/10/06(木) 02:23:32.07 ]
-> を使えば一発

82 名前:デフォルトの名無しさん mailto:sage [2011/10/06(木) 09:00:52.21 ]
やはりここはptr_funの出番d・・・
transform(vec.begin(), vec.end(), vec.begin(), bind2nd(ptr_fun<double, double, double>(pow), 3.0));

83 名前:デフォルトの名無しさん mailto:sage [2011/10/08(土) 21:10:35.55 ]
もっとクールな方法でパブリックメンバ変数を外から見たらconstに中から見たら非constにできる?
struct hoge
{
int const x;
hoge(void) : x(0) { }
hoge(int x) : x(x) { }
hoge & operator = (hoge const & h) { const_cast<int &>(x) = h.x; return *this; }
void inc(void) { const_cast<int &>(x) += 1; }
void dec(void) { const_cast<int &>(x) -= 1; }
};


84 名前:デフォルトの名無しさん mailto:sage [2011/10/08(土) 22:12:54.93 ]
publicなメンバ変数という設計を捨てる

85 名前:デフォルトの名無しさん mailto:sage [2011/10/09(日) 01:07:01.67 ]
void君と名付けよう

86 名前:デフォルトの名無しさん mailto:sage [2011/10/09(日) 09:26:21.88 ]
ファイルを適当な変数の配列にファイルサイズ分一気に読み込みたいんですが、
どうすればできますか?
今はこんな風にして凌いでるけど、どう考えても馬鹿らしすぎる


std::string buf;
std::string DataStr;
while(FileStream&&getline(FileStream,buf))DataStr+=buf;
char *src=new char [DataStr.size()];
memcpy((void *)src,DataStr.c_str(),DataStr.size());

87 名前:デフォルトの名無しさん mailto:sage [2011/10/09(日) 10:18:33.83 ]
std::ifstream ifs("test.txt", std::ios::in|std::ios::binary);
ifs.seekg(0, std::ios::end );
size_t size = ifs.tellg();
ifs.seekg(0, std::ios::beg );
char *buff = new char[size+1];
ifs.read(buff, size);
buff[size] = '\0';
// ...
delete[] buff;

88 名前:デフォルトの名無しさん mailto:sage [2011/10/09(日) 10:54:32.05 ]
#include <exception>
#include <fstream>
#include <iostream>
#include <string>
#include <vector>
template <class A> void readAllAtOnce(char const * path, std::vector<char, A> & data) {
std::fstream file;
file.exceptions(std::ios::badbit | std::ios::eofbit | std::ios::failbit);
file.open(path, std::ios::in | std::ios::binary);
file.seekg(0, std::ios::end);
std::ios::pos_type end(file.tellg());
file.seekg(0, std::ios::beg);
std::ios::pos_type beg(file.tellg());
std::ios::off_type off(end - beg);
if(data.max_size() < off) throw std::exception();
data.resize(off);
file.read(&data[0], off);
file.close(); }
int main(void) {
try {
std::vector<char> buf;
readAllAtOnce("test.txt", buf);
std::string str(buf.begin(), buf.end());
std::cout << str << std::endl; }
catch(...) { std::cout << "err" << std::endl; }
return 0; }

89 名前:デフォルトの名無しさん mailto:sage [2011/10/09(日) 23:12:40.33 ]
窓板の質問スレでたずねたんだけど、返答がないようなのでこっちでも聞かせてください。

C++でWinXPでネットワーク接続を表示したときに表示される「LANおよび高速インターネット」を
表示するexeを作成したいですが、ネットワーク名なんかはレジストリから取得できました。
しかし、切断したネットワーク名まで表示される状態で上記の内容とはずれてしまっています。
レジストリに保管されているネットワークから現在接続されているネットワークだけ表示したいんですけど、
何をフラグとしてしているのかがわかりません。

どなたかご教授お願いします。

90 名前:デフォルトの名無しさん mailto:sage [2011/10/10(月) 01:12:36.92 ]
blogs.msdn.com/b/jpwdkblog/archive/2009/09/29/9900575.aspx
devcon status =net
でdisabled/runningの判別がつくけど他にいい方法があるかもしれん



91 名前:デフォルトの名無しさん mailto:sage [2011/10/10(月) 01:19:16.35 ]
>>87-88
ありがとう、seekgを使うのがポイントなのね

92 名前:デフォルトの名無しさん mailto:sage [2011/10/10(月) 03:43:03.15 ]
イテレータってインクリメントやデクリメントだけでなく、+1や-1でも前後の要素にアクセスできる?

93 名前:デフォルトの名無しさん mailto:sage [2011/10/10(月) 09:19:56.59 ]
自分で試したほうが早かった。できた

94 名前:デフォルトの名無しさん mailto:sage [2011/10/10(月) 09:38:55.18 ]
浮動小数点数をバイナリで保存するにはどうすれば?

95 名前:デフォルトの名無しさん mailto:sage [2011/10/10(月) 10:44:11.90 ]
fwrite
ofstream::write

96 名前:デフォルトの名無しさん mailto:sage [2011/10/10(月) 11:18:44.56 ]
>>90
ありがとう。
devconは知らなかった。試してみる。

97 名前:デフォルトの名無しさん mailto:sage [2011/10/10(月) 23:31:47.94 ]
ローベルのC++入門講座をお持ちの方にお聞きしたいのですが、
P308の演算子オーバーロードの流れがよくわかりません。

> delete[] m_array;
> m_array = array;
deleteしたにも関わらず直後にdeleteしたものを使っていて混乱しています。

98 名前:デフォルトの名無しさん mailto:sage [2011/10/10(月) 23:35:20.40 ]
ロベールの翻訳は分かりやすい

99 名前:デフォルトの名無しさん mailto:sage [2011/10/10(月) 23:36:11.26 ]
その2行だと。
deleteしたのは、m_arrayのポインタが指す領域。
m_arrayはまだ残っている。
そこに、arrayのエリアのポインタを再設定しただけ。

100 名前:デフォルトの名無しさん mailto:sage [2011/10/10(月) 23:37:57.79 ]
×そこに、arrayのエリアのポインタを再設定しただけ。
○そこに、arrayの中にあるポインタを再設定しただけ。





101 名前:デフォルトの名無しさん mailto:sage [2011/10/10(月) 23:40:21.83 ]
m_array→[a][a][a][a][a][a]
array→[b][b][b][b][b][b][b][b][b][b]

↓delete [] m_array

m_array→???
array→[b][b][b][b][b][b][b][b][b][b]

↓m_array=array

m_array--↓
 array→[b][b][b][b][b][b][b][b][b][b]


102 名前:デフォルトの名無しさん mailto:sage [2011/10/10(月) 23:52:41.43 ]
>>99-101
よくわかりました。ありがとうございます!

103 名前:デフォルトの名無しさん mailto:sage [2011/10/11(火) 05:52:14.38 ]
あるクラスのポインタ型の代入演算を定義したいと思っています。
つまり、
Hoge *a,*b;
a=new Hoge;
b=new Hoge;
a=b;<-この部分

この部分の代入演算子を定義するために以下のように書きましたが
チェック用の文字列が出力されません。(コンパイルは通ります)
class Hoge{
public:
Hoge(){}
Hoge* operator=(Hoge& *hoge){cout<<"Check!"<<endl;return this;}
};

どなたか申し訳ないのですがご教示願えないでしょうか。

104 名前:デフォルトの名無しさん mailto:sage [2011/10/11(火) 07:28:56.83 ]
>>103

その代入演算子は、
Hoge a;
Hoge b;
...
a = &b;
としたとき、&a を返す演算子だから呼ばれてない。

105 名前:デフォルトの名無しさん mailto:sage [2011/10/11(火) 07:36:40.08 ]
>>103
これをやろうとすると、ポインタ型のグローバルな代入演算子をオーバーロードすることになるけれど、
C++では、その操作は許されていない。つまり、できない。
どうしてもというなら、copy()メソッドのようなものを作るしかない。


106 名前:デフォルトの名無しさん mailto:sage [2011/10/11(火) 10:46:38.24 ]
template<typename T>struct ptrh{T*const operator=(T*p){return h=p;}ptrh(T*p):h(p){}T*h;};
template<typename T>ptrh<T> ptrh_cast(T*a){return ptrh<T>(a);}

ptrh_cast<hoge>(a)=b;


107 名前:デフォルトの名無しさん mailto:sage [2011/10/11(火) 10:53:41.09 ]
それ挙動確認して無いだろ
参照つけないとダメだな

108 名前:デフォルトの名無しさん mailto:sage [2011/10/11(火) 13:51:34.26 ]
STLのコンテナやイテレーターが満たさないといけない要件をわかりやすくまとめたサイトや書籍は有りますか?

109 名前:デフォルトの名無しさん [2011/10/11(火) 16:22:01.56 ]
久々に実行したら

Setting Default Parameters...
Parsing Configfile encoder.cfgCannot open configuration file encoder.cfg.
続行するには何かキーを押してください . . .

ってでて動きません。
環境変数とかはいじってないはずなんですけど・・・
解決方法がわかる人がいれば教えてください!

110 名前:デフォルトの名無しさん mailto:sage [2011/10/12(水) 01:16:57.92 ]
struct CUSTOMVERTEX2
{
FLOAT x, y, z,h;
DWORD color;
float u,v;
};

CUSTOMVERTEX2* vertices;
vertices=new CUSTOMVERTEX2[kakuKosu*2+2];

verticesを静的に初期化したらうまくいったのですが、
newを使って初期化したら何も表示されなくなりました。
newの書き方が変なのでしょうか。



111 名前:デフォルトの名無しさん mailto:sage [2011/10/12(水) 01:35:29.79 ]
あなたの求める挙動による

112 名前:デフォルトの名無しさん mailto:sage [2011/10/12(水) 01:55:27.49 ]
>>111
CUSTOMVERTEX2* vertices;
vertices=new CUSTOMVERTEX2[20];

CUSTOMVERTEX2 vertices[20];
で挙動の違いがあるんですか?

ちなみに
VOID* pVertices;
if( FAILED( g_pVB->Lock( 0, sizeof(vertices), (void**)&pVertices, 0 ) ) )
return;
memcpy( pVertices, vertices, sizeof(vertices) );
g_pVB->Unlock();

verticesの中身は上記のような感じでバッファーに渡しています。

113 名前:デフォルトの名無しさん mailto:sage [2011/10/12(水) 02:06:05.32 ]
そもそもそれじゃ静的な初期化にもなってないが、
上と下でsizeofが何を返してくるかprintfで確かめたら直ぐに原因は分かる

114 名前:デフォルトの名無しさん mailto:sage [2011/10/12(水) 02:07:00.46 ]
>>112
sizeofの結果が変わってくる
sizeof(vertices[0])*20にすればおk

115 名前:デフォルトの名無しさん mailto:sage [2011/10/12(水) 10:28:00.33 ]
>>113-114
ありがとうございます。
できました。

116 名前:デフォルトの名無しさん [2011/10/13(木) 00:09:58.48 ]
初歩的な質問なのですが、エラー処理のあたりがよくわかりません。

#include <stdio.h>
#include <stdlib.h>

int main(void)
{
 char *str;
 int num, i;

 printf("表示するaの個数を入力\n");
 scanf("%d", &num);

 str = (char *) malloc (sizeof (char) * (num +1));
 if(!str){                  ←【Q1.この!strの意味は何でしょう?】
  printf("メモリが確保できませんでした。\n");
  return 1;                ←【Q2.return 0;ではないのは何故ですか?】
 }
 for (i=0; i<num; i++){
  *(str+i) = 'a';
 }
 *(str+num) = '\0';
 printf("%s\n", str);
 return 0;
}

117 名前:デフォルトの名無しさん mailto:sage [2011/10/13(木) 00:30:21.08 ]
> if(!str){                  ←【Q1.この!strの意味は何でしょう?】
メモリー確保ができなかった場合rtn=0になる。その確認
>  return 1;                ←【Q2.return 0;ではないのは何故ですか?】
プログラムが終了したとこのコードを1(エラー)として0(正常)特別している。

118 名前:デフォルトの名無しさん mailto:sage [2011/10/13(木) 00:31:51.37 ]
×特別している。
○と区別している。

119 名前:デフォルトの名無しさん mailto:sage [2011/10/13(木) 01:07:29.45 ]
A1.malloc()は必要なメモリの確保に失敗するとNULLを返すのでそれをチェックしている
A2.普通main()は成功時に0、失敗時に非0を返す。そのためのマクロEXIT_SUCCESSと
EXIT_FAILUREも定義されている

120 名前:デフォルトの名無しさん mailto:sage [2011/10/13(木) 03:12:37.85 ]
>>117>>118>>119
ありがとうございます。理解できました。
論理演算子とNULL値をよく理解していませんでした。



121 名前:デフォルトの名無しさん mailto:sage [2011/10/13(木) 07:06:25.03 ]
C++を勉強しようと思ってるんだけど
練習問題がついた良いサイトありませんか?

www.geocities.jp/ky_webid/ProgrammingPlacePlus/c/index.html
こんなサイトのC++版があれば理想的なんだけど

122 名前:デフォルトの名無しさん mailto:sage [2011/10/13(木) 08:52:06.18 ]
>>121
C++はCと違ってそのボリュームは生半可じゃないぞ
独習C++でも買え

123 名前:デフォルトの名無しさん [2011/10/13(木) 11:17:11.22 ]
Cの生みの親が死んじゃった・・・・・・


124 名前:デフォルトの名無しさん [2011/10/13(木) 14:14:16.82 ]
独学ですがC言語をマスターした後は何を勉強すればいいですか


125 名前:デフォルトの名無しさん mailto:sage [2011/10/13(木) 14:39:55.46 ]
何がしたいのかによる。

126 名前:デフォルトの名無しさん mailto:sage [2011/10/13(木) 14:56:23.02 ]
>>124
基本情報を取りましょう

127 名前:デフォルトの名無しさん mailto:sage [2011/10/14(金) 12:57:00.56 ]

C言語の課題なんだが 、五つの数字足したあとに平均だす方法がわからん。
教えてください


128 名前:デフォルトの名無しさん mailto:sage [2011/10/14(金) 13:11:34.53 ]
ans = ( a + b + c + d) / 5;

129 名前:デフォルトの名無しさん mailto:sage [2011/10/14(金) 13:12:48.93 ]
ans = ( a + b + c + d + e) / 5; // 1こ足りんかった

130 名前:デフォルトの名無しさん mailto:sage [2011/10/14(金) 13:18:31.86 ]
<<127
すまない、補足なんだがC++だ



131 名前:デフォルトの名無しさん mailto:sage [2011/10/14(金) 15:16:10.61 ]
平均の出し方も分からない奴がプログラミングをやる時代か……

132 名前:デフォルトの名無しさん mailto:sage [2011/10/14(金) 15:58:18.97 ]
平均の求め方をやるのは小6だ
あとはわかるな?

133 名前:デフォルトの名無しさん mailto:sage [2011/10/14(金) 16:10:02.03 ]
最近の小学生はプログラミングなんかやってるのか

134 名前:デフォルトの名無しさん mailto:sage [2011/10/14(金) 16:15:21.83 ]
まあ小6っつったらいろいろ背伸びしたくなる時期なんだろうな

135 名前:デフォルトの名無しさん mailto:sage [2011/10/14(金) 16:19:22.80 ]
後で平均する数を増やすかもしれないのか、小数点以下をどうするのか、そもそも5つの値をどのように与え、どのように出力したいのか

136 名前:デフォルトの名無しさん mailto:sage [2011/10/14(金) 16:24:40.12 ]
小学生とか
俺がお年玉でVB4.0を買った頃じゃないか
結局ろくなもん作れなかったけど

137 名前:片山博文MZ [2011/10/14(金) 17:10:05.90 ]
int *p = new int[0]; // OK or NG?

138 名前:デフォルトの名無しさん mailto:sage [2011/10/14(金) 19:05:53.66 ]
>>137
OK
ついでに言うと自分でnewをオーバーロードするときもサイズ0に対応できるように書かなければならない



139 名前:デフォルトの名無しさん [2011/10/14(金) 21:12:05.51 ]
>>130

俺と同じ悩み持っててワロタ

#include <stdio.h>
int main()
{
int a, b, c, d, e;
int f=5;

puts("一つ目の数を入力");
scanf("%d", &a);
puts("二つ目の数を入力");
scanf("%d", &b);
puts("三つ目の数を入力");
scanf("%d", &c);
puts("四つ目の数を入力");
scanf("%d", &d);
puts("五つ目の数を入力");
scanf("%d", &e);

}

ここまでは出来るんだが、ここから合計と平均をprintfで出力する方法がわからない。
たぶん同じ事言ってるんだと思う

140 名前:デフォルトの名無しさん mailto:sage [2011/10/14(金) 21:16:55.22 ]
printf(" 平均=%d",(a + b + c + d + e)/f); // 小数点以下切り捨ての場合



141 名前:デフォルトの名無しさん mailto:sage [2011/10/14(金) 21:35:33.01 ]
ttp://codepad.org/JYRrwYAj

142 名前:デフォルトの名無しさん mailto:sage [2011/10/15(土) 08:29:11.34 ]
>>139
C++らしさをどうしても出したいなら、cin と cout 使えば?


143 名前:デフォルトの名無しさん mailto:sage [2011/10/15(土) 09:48:34.05 ]
>>142
その前にcstdioだろ

144 名前:デフォルトの名無しさん mailto:sage [2011/10/15(土) 15:10:53.49 ]
0x年代でもscanfの人気は揺るぎなかった

145 名前:デフォルトの名無しさん mailto:sage [2011/10/15(土) 16:56:04.82 ]
fgets(buf, sizeof(buf), stdin);
n = sscanf(buf, "%d %d", &a, &b);

146 名前:デフォルトの名無しさん mailto:sage [2011/10/16(日) 00:22:43.73 ]
VISUALC++やってんだけど四捨五入どうやんの?

147 名前:デフォルトの名無しさん mailto:sage [2011/10/16(日) 00:44:14.95 ]
四捨五入した値の用途次第

148 名前:デフォルトの名無しさん mailto:sage [2011/10/16(日) 00:48:50.24 ]
>>146
お前の頭の中の四捨五入の手順を細かく分解してその一つ一つの段階をプログラムにするだけ

頭の中のもやもやした考えを分析・整理してプログラムで表現するのは
上手くプログラムを書くのに必須の能力だからそのつもりでやってみな

149 名前:デフォルトの名無しさん mailto:sage [2011/10/16(日) 00:51:37.79 ]
>>146
boost::math::round<T>(X)

150 名前:デフォルトの名無しさん mailto:sage [2011/10/16(日) 01:00:25.46 ]
>>146
#include <boost/math/special_functions.hpp>



151 名前:デフォルトの名無しさん mailto:sage [2011/10/16(日) 13:49:05.02 ]
>>146
0.5をたしてきりすてる

152 名前:デフォルトの名無しさん mailto:sage [2011/10/17(月) 21:13:14.45 ]
>>147
哀しいけどソレが現実なのよね

153 名前:デフォルトの名無しさん mailto:sage [2011/10/18(火) 00:12:38.15 ]
質問です。
下のようなファイルをバイナリ形式で保存する場合、
ClsFile clsFile;
write(clsFile, sizeof( ClsFile ) );
とすると、ClsPageはポインタしか保存されないですよね?

ということは、
write(clsFile, sizeof( ClsFile ) );
for(ii = 0;ii < 5; ii++){
write(m_page[ii], sizeof( ClsPage) );
}
と、わざわざ構造体を分けて保存しないといけないのでしょうか?

Class ClsFile{
Class ClsPage{
char m_moji[200];
};
ClsPage* m_page[5];
}

154 名前:デフォルトの名無しさん mailto:sage [2011/10/18(火) 02:05:15.85 ]
>>153
当たり前
C++なら自分でoperator<<を作るといい

155 名前:デフォルトの名無しさん mailto:sage [2011/10/18(火) 08:03:56.29 ]
>>153
オーバーロードと再帰をうまく使えば簡単に保存できるよ


156 名前:デフォルトの名無しさん mailto:sage [2011/10/18(火) 09:28:51.24 ]
>>153
まとめて保存すると、場合によってはアライメントの罠にはまって復帰できなくなる。

157 名前:デフォルトの名無しさん mailto:sage [2011/10/18(火) 10:41:55.33 ]
>>153
boost.serialization使えばいいじゃん

158 名前:デフォルトの名無しさん mailto:sage [2011/10/18(火) 10:44:41.95 ]
boost使えばいいじゃん厨は低能

159 名前:デフォルトの名無しさん mailto:sage [2011/10/18(火) 12:56:42.27 ]
車輪の再発明をしようとする奴は低脳

160 名前:デフォルトの名無しさん mailto:sage [2011/10/18(火) 13:05:27.32 ]
車輪の再発明ができない奴は、底辺コーダー止まりだろ



161 名前:デフォルトの名無しさん mailto:sage [2011/10/18(火) 13:26:56.08 ]
>>159
boostでいいじゃん厨がアホであることを示す典型的なレスだな

162 名前:デフォルトの名無しさん mailto:sage [2011/10/18(火) 14:04:55.95 ]
>>159
プログラムの99%は車輪の再発明、おまえはプログラムできないなw

163 名前:デフォルトの名無しさん mailto:sage [2011/10/18(火) 17:15:55.61 ]
そもそも質問に答えずにboostを薦める時点で質問理解力なしで解雇が妥当

164 名前:デフォルトの名無しさん mailto:sage [2011/10/18(火) 19:00:58.56 ]
boost は利用できる局面では便利だが、背景を無視して何でもかんでもboost言う奴は
確かにごにょごにょごにょ…特に実務に携わる機会の少ない研究者やアマチュアに多い傾向があるように思える。



165 名前:デフォルトの名無しさん mailto:sage [2011/10/18(火) 19:51:46.04 ]
codepadに具体的なコード上げてみろよ
話はそれからだ

166 名前:153 mailto:sage [2011/10/19(水) 00:59:45.97 ]
いろいろアドバイスありがとうございます。
しかし、私にはどれが最適なのかが解りません・・・
将来的に下記のようにバージョンを変更したときにも互換性を持たせられるようにしたいと思っているのですが、
その場合、構造体毎ではなく、クラス内で1メンバ毎に読み書きする仕様にしたほうが良いのでしょうか。

Class ClsPage{
char m_moji[200];
};

Class ClsPage{
char m_Title[10];
char m_moji[200];
};

167 名前:デフォルトの名無しさん mailto:sage [2011/10/19(水) 07:37:42.94 ]
クラス内にシリアライズ/デシリアライズするメソッドを作成して、先頭にバージョン情報を入れておく。
デシリアライズ時にはバージョン情報を見てメンバを初期化して下さい。


168 名前:デフォルトの名無しさん mailto:sage [2011/10/22(土) 15:47:49.83 ]
0からC、C++を始るのに、
初心者でも分かり易く解説されているサイトがあれば教えて下さい。
もしなければ、お勧めの本を教えて下さい。

できれば少ない冊数で、安価な物でお願いします・・・。


169 名前:デフォルトの名無しさん mailto:sage [2011/10/22(土) 16:01:41.32 ]
値段の問題なら、図書館で借りるか古本屋で買えば良い

170 名前:デフォルトの名無しさん mailto:sage [2011/10/22(土) 16:07:07.00 ]
独習C



171 名前:デフォルトの名無しさん mailto:sage [2011/10/22(土) 16:32:41.44 ]
ロベールの翻訳が分かりやすい

172 名前:デフォルトの名無しさん mailto:sage [2011/10/22(土) 16:39:59.81 ]
>>168
やさしいC
やさしいC++


173 名前:デフォルトの名無しさん [2011/10/24(月) 23:59:40.88 ]
参考書の質問があったので、一緒に相談させてください。
『やさしいC』の次に使う参考書で悩んでいます。
来年からPGとして働く予定があり、そのため今は独学で勉強中という状況です。

3ヶ月かけ、参考書付属の練習問題は解けるようになったのですが
応用がほとんどできない、というのが悩みです。
宿題スレにある、大学生や専門学校生がこなしていると思われるレベルのものも
ほとんど自力では100%のものが作れません。(解答を見れば理解できます)
「C言語でこういうソフトが作りたい!」という欲求もあまりないので、
問題集形式のものや、何か1つのソフトを作るという形式のものが良い
Amazonレビューなども見てみたのですが、なかなか決められません。
おすすめの参考書を紹介していただけませんか。
(今度大きな書店がある都心の方へ行く用事があるので、そのときに中身も自分で見てみようと思います)

174 名前:デフォルトの名無しさん mailto:sage [2011/10/25(火) 04:21:06.51 ]
>>173
来年からだったら、もうその手の本は読まない方が良い
(自分も似た様な境遇で挫折した過去が。。。)

ググりながらでも、linuxなりwinのコマンドプロンプトなりのコピーを作るとかした方が良い

買うのは精々c言語のリファレンスとか関数辞典

GUIは今は出来なくて良い
見た目より、中身を作れる能力身に付けなさい



175 名前:デフォルトの名無しさん mailto:sage [2011/10/25(火) 04:23:32.45 ]
追記

単純なechoコマンドとかyesコマンドから始めるといいかも


176 名前:デフォルトの名無しさん mailto:sage [2011/10/27(木) 09:04:41.62 ]
しろうとならまずはアドレス帳あたりだな
データはXMLで保存して構文解析の練習もしよう

177 名前:デフォルトの名無しさん mailto:sage [2011/10/28(金) 19:59:53.41 ]
C言語の上位互換がC++言語と聞いたのですが、
C++を学べばCもすらすら出来るようになるのでしょうか?

それとも、先にCを学んでからC++を勉強し始めた方が良いのでしょうか?

178 名前:デフォルトの名無しさん mailto:sage [2011/10/28(金) 20:32:04.72 ]
>>177
Cは言語使用がシンプルだから、
C++やる前に、さらっとCやっておくのは個人的には良いことだと思う。



179 名前:デフォルトの名無しさん mailto:sage [2011/10/28(金) 20:38:33.18 ]
C言語から始めて構造化プログラミングの問題点を身を持って理解してから
C++でオブジェクト指向プログラミングのメリットを体験すべき

180 名前:デフォルトの名無しさん mailto:sage [2011/10/28(金) 20:46:33.48 ]
>>179
>C言語から始めて構造化プログラミングの問題点を身を持って理解してから

横レスだけど、問題点ってなんだろ?



181 名前:デフォルトの名無しさん mailto:sage [2011/10/29(土) 04:21:10.87 ]
>>177
CとC++は別の言語だから、Cで仕事をするならCを、C++で仕事をするならC++を学んで下さい。
移植のために互換性がありますが、同じ言語だと思ったら大間違いです。


182 名前:デフォルトの名無しさん mailto:sage [2011/10/29(土) 09:00:31.10 ]
>>177
C言語はやっといた方がいいと思う。
で、C++でのC言語にないoperator等の利便性がわかると思う。


183 名前:デフォルトの名無しさん mailto:sage [2011/10/29(土) 11:44:46.16 ]
C/C++で家が流されないためのプログラムは組めますか?
ttp://mukago.game.coocan.jp/main/


184 名前:デフォルトの名無しさん mailto:sage [2011/10/29(土) 12:07:06.70 ]
>>180
俺も横レス
構造化プログラミングは優れた思想だけど、
Cだとそれ以外の選択肢を取りにくい。
C++ならオブジェクト思考だったり、templateだったり、
関数型プログラミングだったり、複数の選択肢が出てくる。
・・・その代わり機能が多過ぎて覚えるのに時間がかかるけど

185 名前:デフォルトの名無しさん mailto:sage [2011/10/29(土) 12:09:08.12 ]
>>183
Cはハードウェアを制御するプログラミング言語だからそのような機能を備えたハードウェアを開発して
そのハードウェアをC/C++から制御するという形でなら可能ではないでしょうか

186 名前:デフォルトの名無しさん mailto:sage [2011/10/29(土) 12:32:03.11 ]
>>183
運が良ければ標準Cだけで可能

187 名前:デフォルトの名無しさん mailto:sage [2011/10/29(土) 12:33:06.25 ]
>>184
覚えるのは難しくないが実際にモノを作るときにどの選択肢がいいのかを正しく選ぶのが難しい

188 名前:デフォルトの名無しさん mailto:sage [2011/10/30(日) 00:07:22.66 ]
>>185
家の土台部分に船のような構造をつけて波に反応して
家から船に変わるとかそんな感じでしょうか?
いまいちイメージできません。


189 名前:デフォルトの名無しさん mailto:sage [2011/10/30(日) 03:50:55.80 ]
ランダムに点を取得した際のボーリングのスコアの期待値をだすものを作りたいのですが
スコア総あたり→ループ回数で割る
という方法よりも効率よく求められる方法ってなにかありますでしょうか?

190 名前:デフォルトの名無しさん mailto:sage [2011/10/30(日) 04:58:24.79 ]
入社試験のFizzBuzz問題ってだた単にこの処理が書けるかじゃなくて、どれだけ効率良い
処理を書けるかを見られてるんだよね?どんなコードにするのが正解なの?



191 名前:デフォルトの名無しさん mailto:sage [2011/10/30(日) 05:21:05.06 ]
>>189
ランダムに点を取得する(つまり最初の1フレームの1投目のスコア期待値が55/11となる)前提で
なげ続けた場合の最終的なトータルスコアの期待値を求めたいってこと?
静的な式になるから、式を作れば簡単に解けるだろうけど、
全部の場合を列挙するのがちょー面倒なんじゃ…特にストライクが癌だな。


192 名前:デフォルトの名無しさん mailto:sage [2011/10/30(日) 08:35:04.93 ]
30ByteでFizzBazz書けって言われたけど
#include<stdio.h>
int main(vo
で30Byteになってしまった
いったいどうすればいいんですか?

193 名前:デフォルトの名無しさん mailto:sage [2011/10/30(日) 09:18:37.59 ]
>>190
プログラミングの基本的なこと(順次実行、分岐、ループ)が理解出来て、それが応用できるかどうかでしょ
要するに「根本的にプログラミングに
向いてない人」をフィルタするための問題かと

194 名前:デフォルトの名無しさん mailto:sage [2011/10/30(日) 10:17:30.88 ]
ありがとう、じゃあ別に普通にif(i%15==0) elseif(i%3==0) elseif(i%5==0) else
でも減点ないのか。でもこれじゃ出来ない人なんていなくねと思うけど


195 名前:デフォルトの名無しさん mailto:sage [2011/10/30(日) 10:39:46.05 ]
>>194
信じられないかも知れないが
この程度でもまともにコードに出来ない人は本当に居るからなー

196 名前:デフォルトの名無しさん mailto:sage [2011/10/30(日) 10:59:57.67 ]
>>189
分岐は、ストライク、クリア、クリア無しの3つだから、各パターンの期待値を再帰で求める。

197 名前:デフォルトの名無しさん mailto:sage [2011/10/30(日) 12:01:58.57 ]
FizzBazz問題って自分が普段つかってない言語で出されて
困るってものじゃないのか?
ループ文なんだっけみたいな。

198 名前:デフォルトの名無しさん mailto:sage [2011/10/30(日) 12:15:07.78 ]
>>196
期待値って1つだろ。


199 名前:デフォルトの名無しさん mailto:sage [2011/10/30(日) 12:30:13.55 ]
>>198
平均値とは多分、確率付き部分期待値の計の事のつもりだろうから、これで合ってる。

200 名前:デフォルトの名無しさん mailto:sage [2011/10/30(日) 12:35:28.16 ]
>>195
いねーよwww




201 名前:デフォルトの名無しさん mailto:sage [2011/10/30(日) 13:21:10.95 ]
>>200
俺も以前はおまえと同じ考えでした…

202 名前:デフォルトの名無しさん mailto:sage [2011/10/30(日) 16:05:55.41 ]
ttp://www.aoky.net/articles/jeff_atwood/why_cant_programmers_program.htm

203 名前:デフォルトの名無しさん mailto:sage [2011/10/30(日) 16:59:31.69 ]
>>199
エスパー?
平均値なんてどこに書かれてるんだ?

204 名前:デフォルトの名無しさん mailto:sage [2011/10/30(日) 18:51:19.14 ]
>>202
それは外国の話だろ
少中高大とマジキチ排除フィルターがよく機能してる日本ではあり得ない


205 名前:デフォルトの名無しさん mailto:sage [2011/10/30(日) 23:24:03.72 ]
日本でも2〜3%くらいいるんじゃないかと思ってる

206 名前:デフォルトの名無しさん mailto:sage [2011/10/31(月) 00:14:48.55 ]
FizzBazz問題ってあの言語もこの言語も使えますって言う奴に、じゃあそれぞれの言語
でFizzBazz書いてみてっていう為の問題じゃないの

207 名前:デフォルトの名無しさん mailto:sage [2011/10/31(月) 00:27:04.90 ]
FizzBuzzでゲームとしてやるとなかなか難しいよな

208 名前:デフォルトの名無しさん mailto:sage [2011/11/02(水) 21:44:06.70 ]
転売用にAmazon自動予約スクリプト使いたいけど、パソコンの台数と、回線の数、どっちが大事?

209 名前:デフォルトの名無しさん mailto:sage [2011/11/02(水) 23:09:29.09 ]
>>208
コンパイラのバージョンは?

210 名前:デフォルトの名無しさん mailto:sage [2011/11/03(木) 07:25:39.91 ]
>>208
回線の数




211 名前:デフォルトの名無しさん mailto:sage [2011/11/03(木) 14:40:20.39 ]
iに1から9までの値が入力されるまで
延々とscanfを繰り返すプログラムを作りたいのですが

do{
scanf("%d",i);
}
while(i<1||9<i)

このようにすると、文字列が入力された時等にwhileを抜けてしまうので上手く動作しません。
想定しない文字列(全角文字や英字、記号)はどのように処理するのが一般的ですか?
while(!(0<i&&i<10)も検討してみたのですがこちらはどうでしょう?

212 名前:デフォルトの名無しさん mailto:sage [2011/11/03(木) 14:47:37.16 ]
>>211
ここの下の方のようにすればいいとおもわれ
ttp://ja.wikipedia.org/wiki/Scanf

213 名前:デフォルトの名無しさん mailto:sage [2011/11/03(木) 19:41:38.43 ]
>>212
ありがとうございます。
上手く処理できそうです!
wikipediaにヒントがあるとは…。
検索不足かつ初歩的な質問ですみませんでした。

214 名前:デフォルトの名無しさん mailto:sage [2011/11/04(金) 02:57:21.58 ]
XMLとかのタグのいい検出方法教えてください。
今は
src=strstr(src,タグ名)+strlen(タグ名);
'<'までコピー
ってしてるけど、汎用性がない

215 名前:デフォルトの名無しさん mailto:sage [2011/11/04(金) 11:56:25.19 ]
>>214
規模が大きいならパーサライブラリを使うのが無難だけど、
そうでもないならstrstr()でもいいんでない?
どの辺が汎用性がないと思っているの?

216 名前:デフォルトの名無しさん mailto:sage [2011/11/04(金) 23:49:27.03 ]
>>215
決まったタグしか検出できないとか、タグの書く順番をガチガチに決めておかないと
いけないとかそういう辺り。HTMLみたいな感じでタグの書く箇所によって、どこ
がどの属性を持つかとかまで指定出来るようにしたいんだけど、それをしようとすると
if文で羅列するばっかの馬鹿みたいなコードになっちゃう。
パーサライブラリで調べたらいっぱい出てくるのね。オープンソースの探してどうやってるの
か見てみることにする

217 名前:デフォルトの名無しさん mailto:sage [2011/11/05(土) 03:22:25.00 ]
Windowsでプログラムのメモリ消費量を知りたいのですが、どうすればいいのでしょうか?
最大メモリ消費量ではなく、現在のメモリ消費量を随時知りたいです。

218 名前:デフォルトの名無しさん mailto:sage [2011/11/05(土) 03:49:00.68 ]
>>217
ProcessExplorerでも使えばいいやん

219 名前:デフォルトの名無しさん [2011/11/05(土) 03:53:28.86 ]
構造体に特定の値("a")が手入力された時に、ループから抜ける処理をしたいのですが動きません。
aを入力しても5回ループしてしまいます。
コンパイルエラーはないのですが、どこがおかしいか分かりますか?
(ファイル分割や構造体の宣言で躓いているかもしれません)

/* main.h */
struct shain{
char *name;
int num; //未使用
}

/* main.c */
myfunc();

/* myfunc.c */
void myfunc(void){
struct shain list[5];
for (i=0 ; i<5; i++){
scanf("%s", &list[i].name);
if (list[i].name == "a"){
printf("aが入力されました\n");
break;
}
}
}

220 名前:デフォルトの名無しさん mailto:sage [2011/11/05(土) 03:53:49.99 ]
ここから、ここの処理まではメモリ消費量何Mだったとか書き出したいのです



221 名前:デフォルトの名無しさん mailto:sage [2011/11/05(土) 04:09:30.08 ]
>>219
/* main.h */ 
struct shain{ 
char *name; //←ポインタしか作られてない正確には
//char nameか、配列やmallocで確保
int num; //未使用 

} 

/* main.c */ 
myfunc(); 

/* myfunc.c */ 
void myfunc(void){ 
struct shain list[5]; 
for (i=0 ; i<5; i++){ //int iで宣言
scanf("%s", &list[i].name); //危険、一文字ならgetchar
if (list[i].name == "a"){ //""だとaのポインタになっとる。'a'。
//または比較関数使え
printf("aが入力されました\n"); 
break; 
} 
} 
}

222 名前:219 mailto:sage [2011/11/05(土) 04:34:55.93 ]
>>221
動いた!
ありがとうございます!!

223 名前:デフォルトの名無しさん mailto:sage [2011/11/05(土) 07:36:28.71 ]
visual stadio 2003で作ったプログラムをvisual c++ 2010 expressで使うと
deque interator not dereferencableて出ます。
対処法を教えていただきたいです。

224 名前:デフォルトの名無しさん mailto:sage [2011/11/05(土) 08:38:37.67 ]
>>220
アロケータ−作れば?

225 名前:デフォルトの名無しさん mailto:sage [2011/11/05(土) 17:55:16.70 ]
>>223
コピペくらい手順をちゃんと覚えなさいよ。
んで、ここに貼らずに翻訳サイトに貼れば答えが出てくるよ。

226 名前:デフォルトの名無しさん mailto:sage [2011/11/05(土) 17:56:00.64 ]
>>220
自分で書いた処理なら、自分で把握できているでしょ。それを書き出せばいいじゃん。

227 名前:デフォルトの名無しさん mailto:sage [2011/11/05(土) 23:33:10.37 ]
>>220
他人が作ったプロセスのメモリ消費量を知りたいのか、自分のコードの中で、自分の消費した量を知りたいのかで違う。
また、自分の消費した量でも、スタックだとかstaticだとかnewやallocだとかのどの量を知りたいのかで違う。
さらに、スレッド別に知りたいかどうかでも違う。


228 名前:デフォルトの名無しさん mailto:sage [2011/11/06(日) 06:19:15.51 ]
クラスに追加で一時的に変数持たせたい、要するに
クラスに計算結果を入れておく変数を一時的に作りたいんだけど、どうすればできますか?

229 名前:デフォルトの名無しさん mailto:sage [2011/11/06(日) 09:45:43.45 ]
そのクラスの定義を変更できないなら直接は無理。そのクラスを継承や包含で利用する別のクラスを作る。

230 名前:デフォルトの名無しさん mailto:sage [2011/11/06(日) 10:51:17.37 ]
>>229
便乗ですみません。継承・委譲はわかるのですが、包含はよくわかりません。java や c++ だとどんな感じのコードになるのでしょうか?



231 名前:デフォルトの名無しさん mailto:sage [2011/11/06(日) 10:57:15.41 ]
>>228
std::map<Hoge const *, TempValueType>

232 名前:デフォルトの名無しさん mailto:sage [2011/11/06(日) 12:29:13.37 ]
>>230
C++で包含といったらある型が他の型(のインスタンス)を内部にもつ(所有する)、くらいのおおまかな概念でしかないよ

struct X { // X型はint型とY型を包含する
 int x;
 Y y;
};

int x[10]; // intの配列型はint型を包含する (とは概念的にはありえるけど普通は言わない)

233 名前:デフォルトの名無しさん mailto:sage [2011/11/06(日) 14:18:37.77 ]
>>244 >>226-227
自分で組んでるプログラムのヒープやスタック全てを合わせたメモリ消費量を知りたい。
そういう関数でもあるかと思ったけど無いのね
アロケーター調べてみたけど作るのも面倒そうだし、全部数えて書き出すのは規模的に
ありえないしで、もう諦めることにする。ありがとう

234 名前:デフォルトの名無しさん mailto:sage [2011/11/07(月) 18:14:50.65 ]
タスクマネージャで仕様メモリなんか表示できてるんだからあるんじゃねぇの

235 名前:デフォルトの名無しさん mailto:sage [2011/11/07(月) 18:36:25.60 ]
アロケータごときで面倒とか言ってたら何も出来ないだろ

236 名前:デフォルトの名無しさん [2011/11/07(月) 22:20:44.39 ]
namespace内のoperatorってどうやって呼べばいいのでしょうか?
例えばboost::assignの += みたいなやつ。

using namespace boost::assign;
std::vector<double> vec;
vec += "1.0", "2.0";

でusingを使わずにboostのoperator+=を呼ぶ方法はあるのでしょうか?

237 名前:デフォルトの名無しさん mailto:sage [2011/11/07(月) 23:08:15.53 ]
boost::assing::operator , (boost::assign::operator += (vec, "1.0"), "2.0") ;

使ったこと無いからわからんけどたぶんこう



238 名前:デフォルトの名無しさん mailto:sage [2011/11/07(月) 23:49:54.14 ]
operator+=とは違うし試してないがたぶんこういう感じのどれかでいける
boost::assign::push_back(vec)("1.0")("2.0");
boost::assign::push_back(vec), "1.0", "2.0";
追加でなくてよいなら
vec = boost::assign::list_of("1.0")("2.0");
vec = boost::assign::list_of("1.0"), "2.0";

239 名前:デフォルトの名無しさん mailto:sage [2011/11/08(火) 00:02:03.97 ]
いつ見てもおぞましいインターフェースだな

240 名前:デフォルトの名無しさん mailto:sage [2011/11/08(火) 00:19:13.46 ]
vector<double>に文字列はどの方法でも入らんな



241 名前:デフォルトの名無しさん mailto:sage [2011/11/08(火) 04:17:41.94 ]
>>239
いやまったく。
boostは確かに便利な局面もあるが、そんな無理しなくてもと思うことの方が多い。


242 名前:デフォルトの名無しさん mailto:sage [2011/11/08(火) 19:15:01.84 ]
アドレスを文字列に変換する場合、
void* pVoid = ...
ostringstream oss;
oss << pVoid;
こうするとoss.str()には、例えば「000012AB」という文字列が入るのですが、
16進数・0埋め・桁数など指定していなくても、環境問わずそれらが指定された形になる事は保障されているのでしょうか?
また、64bitOSでは16桁になるのでしょうか?

243 名前:デフォルトの名無しさん mailto:sage [2011/11/08(火) 20:15:37.91 ]
そんな保証はない

244 名前:デフォルトの名無しさん mailto:sage [2011/11/08(火) 20:16:12.25 ]
>>242
「指定していないのに指定された形になることが保証されているのか」って、
自分でなにを言ってるのか良く考えてからどうぞ。

245 名前:デフォルトの名無しさん mailto:sage [2011/11/12(土) 17:21:00.49 ]
継承って何ですか
バカにも分かるように教えて下さい

246 名前:デフォルトの名無しさん mailto:sage [2011/11/12(土) 18:56:06.66 ]
ロマサガ2をやれば分かると思うよ

247 名前:デフォルトの名無しさん mailto:sage [2011/11/12(土) 19:50:13.26 ]
>>245
既存のクラスの一部/全ての機能を利用する新しいクラスを作る手法の一つ

248 名前:デフォルトの名無しさん mailto:sage [2011/11/12(土) 20:00:36.18 ]
>>247
わかりづらいです・・・
ドラゴンボールで例えてみてください・・・

249 名前:デフォルトの名無しさん mailto:sage [2011/11/12(土) 20:09:31.37 ]
>>248
ゴクウを亀仙人のところで修行させてかめはめ波を習得すること。

250 名前:デフォルトの名無しさん mailto:sage [2011/11/12(土) 20:36:50.37 ]
>>248
セルは孫悟空、ベジータ、ピッコロ、フリーザ達の強い細胞を継承して生まれた



251 名前:デフォルトの名無しさん mailto:sage [2011/11/13(日) 01:40:39.84 ]
構造体の実態をexternしたいのですが何をやっても値がnullになってしまいます・・・。
値を代入したソース上で開けばちゃんと値が入っているのですが、他のソースからだと見れないのですが、どうすればいいでしょうか・・・。


252 名前:デフォルトの名無しさん mailto:sage [2011/11/13(日) 02:02:56.46 ]
>>251
問題のコードをcodepadかideoneに貼れ。

253 名前:デフォルトの名無しさん mailto:sage [2011/11/13(日) 21:01:12.73 ]
下記ようなのクラスのインスタンスをsetにぶち込むとリンカエラーが来るのですが、
テンプレートでの、friendな演算子の定義の仕方に問題があるのでしょうか?

template<class T>
class Test{
public:
T data;
friend bool operator <(const Test<T> &a, const Test<T> &b);
};
template<class T> bool operator <(const Test<T> &a, const Test<T> &b){
return a.data<b.data;
}


254 名前:デフォルトの名無しさん mailto:sage [2011/11/13(日) 21:20:32.38 ]
宣言と定義を分けるな

255 名前:デフォルトの名無しさん mailto:sage [2011/11/13(日) 21:35:13.87 ]
>>254
ありがとうございました。

256 名前:デフォルトの名無しさん mailto:sage [2011/11/14(月) 10:20:27.56 ]
こういう事か

template <class T>
class Test;

template <class T>
bool operator<(const Test<T>& a, const Test<T>& b) {
return a.data < b.data;
}

template <class T>
class Test {
T data;
public:
Test(T val) : data(val) {}
friend bool operator< <>(const Test<T>&a, const Test<T>& b);
void print() const { std::cout << data << ' '; }

};

int main(void)
{
typedef Test<double> TD;
std::set<TD> td;

td.insert(TD(1.0));
td.insert(TD(0.5));
std::for_each(std::begin(td), std::end(td), [&](TD t) { t.print();} );
std::cout << std::endl;
}

257 名前:デフォルトの名無しさん mailto:sage [2011/11/14(月) 10:24:09.66 ]
templateって特殊化した定義ならソースに書いて良いの?

258 名前:デフォルトの名無しさん mailto:sage [2011/11/14(月) 12:25:43.81 ]
>>256
それだと

Test<int> t(100);
t < 123; //できない
50 < t; //できない
t < Test<int>(200); //これならできる

とかで不便なときがあるぞ

259 名前:デフォルトの名無しさん mailto:sage [2011/11/14(月) 13:01:25.88 ]
>>258
当たり前じゃん
operator<が定義されてないんだから
Testってクラスだよ?

俺は>>253を試して何とか動くようにしてみただけ


260 名前:デフォルトの名無しさん mailto:sage [2011/11/14(月) 14:20:45.83 ]
>>259
>>253,254

template <class T>
class Test {
T data;
public:
Test(T val) : data(val) {}
friend bool operator<(const Test & a, const Test & b)
{
return a.data < b.data;
}
};

int main(void)
{
using namespace std;
Test<int> t(100), t2(1000);
cout << (t < t2) << endl;
cout << (t < 123) << endl;
cout << (50 < t) << endl;
}



261 名前:デフォルトの名無しさん mailto:sage [2011/11/14(月) 15:22:36.11 ]
>>260
どうなってんのこれ?
変換演算子もないのにどうして動くの?

262 名前:デフォルトの名無しさん mailto:sage [2011/11/21(月) 12:06:13.76 ]
templateを使いすぎると実行ファイルが大きくなるから気をつけろって言われたんですけど
実行ファイルが大きくなってなにか困ることがあるんですか?


263 名前:デフォルトの名無しさん mailto:sage [2011/11/21(月) 12:58:34.87 ]
メモリの使用量が増えるとか起動が遅くなるとか

264 名前:デフォルトの名無しさん mailto:sage [2011/11/21(月) 13:19:24.28 ]
要領不足でインストールできなくなる

265 名前:デフォルトの名無しさん mailto:sage [2011/11/21(月) 14:09:10.89 ]
大きくなるか??

266 名前:デフォルトの名無しさん mailto:sage [2011/11/21(月) 14:29:32.76 ]
>>260
friendで演算子を定義すると、object.operator@(引数)という形では評価されないので
暗黙のコピーコンストラクタにより一時オブジェクトが生成される

もちろんクラス内部にdeep copyが必要な要素が混ざっていると危険なので
自前でコピーコンストラクタを定義する

267 名前:デフォルトの名無しさん mailto:sage [2011/11/21(月) 15:19:31.90 ]
>>265
インライン展開されちゃうよ、な話ではなかろうか。

268 名前:デフォルトの名無しさん mailto:sage [2011/11/21(月) 15:28:44.33 ]
別にtemplateじゃなくてもインライン展開されるけどね。

269 名前:デフォルトの名無しさん mailto:sage [2011/11/26(土) 04:20:58.65 ]
今時PC上で動かすならインライン展開できるだけするべきだろ

270 名前:デフォルトの名無しさん mailto:sage [2011/11/26(土) 04:33:41.80 ]
インライン展開はできる限る使わない方が速い。
メモリ使用量が増大するし、同一関数が別々と認識されCPUキャッシュの効果が薄れる。



271 名前:デフォルトの名無しさん mailto:sage [2011/11/26(土) 05:18:44.06 ]
というか、インライン展開で速度速くなるものなの?
インライン展開した所で、たいして速くなりそうもない気がする。
アルゴリズムとか制御構造見直した方がよほど速くなる可能性があるだろ。たぶん。

272 名前:デフォルトの名無しさん mailto:sage [2011/11/26(土) 08:40:21.30 ]
ためしにVC++2008でインクリメントするだけの関数で
[256 * 256][256]のint配列の全要素をインクリメントしたら
inlineじゃないほうが倍ぐらい早かった
こういう小さい関数ってinlineの得意な分野だと思ってたけどそうでもなかったようだ

273 名前:デフォルトの名無しさん mailto:sage [2011/11/26(土) 09:32:48.11 ]
>>272
最適化で消えてる可能性は?

274 名前:デフォルトの名無しさん mailto:sage [2011/11/26(土) 09:38:55.85 ]
>>272
何通りか試したら、同等〜20%程inlineのほうが速いよ
最適化防止のコードを入れてないんじゃないの?

275 名前:デフォルトの名無しさん mailto:sage [2011/11/26(土) 10:04:11.99 ]
パフォーマンス測定で最適化防止っておかしくね?

276 名前:デフォルトの名無しさん mailto:sage [2011/11/26(土) 10:09:15.33 ]
インライン展開の効用は、コードをインラインに展開して関数呼び出しを減らすことよりも
関数内部と外部に跨る最適化が施されることにあるよ。
例えば、C++でクラスのメンバのアクセサを作ったとすると、メンバに直接アクセスするのと同じコードになり得る。
↓のfoo::func()も、最適化で定数と同じになれる。
--
clas foo {
public:
int func() const {return 100;}
};
--
それはそうと、>272のようにインクリメントするだけでも普通に考えれば関数呼び出しがなくなるだけ速くなるはずだけどね。

277 名前:デフォルトの名無しさん mailto:sage [2011/11/26(土) 18:17:22.55 ]
>>270
巨大な関数ならともかく、小さな関数はインライン展開した方が高速。
巨大な関数を展開するコンパイラはないと思うが、されたらキャッシュに響くので低速になる場合がある。

>>271
意味のない比較

>>272
ソースがないので何とも言えないが、君のテスト方法が間違っている可能性大。
その配列のサイズを見る限り、インラインじゃないところにボトルネックがありそう。


278 名前:デフォルトの名無しさん [2011/11/26(土) 19:47:26.08 ]
ちょっとageますよ
少し前に糞スレをage荒らししてたアホがいたもんで大事なスレが全部
下の方に行ってしまってる

279 名前:デフォルトの名無しさん mailto:sage [2011/11/26(土) 19:53:06.42 ]
昔のCPUはジャンプ命令のコストがでかかったとか、パイプライン処理が初期化されるとかで有効だった。
(引数や復帰アドレス保存のコストもかかるし)

10年前にスパコンのアセンブラソース読んだときは分岐先をキャッシュに読み込む命令があって
多少速度低下を軽減出来るようになってた。

280 名前:デフォルトの名無しさん mailto:sage [2011/11/26(土) 20:02:37.24 ]
今じゃ遅延スロットも完全に消えたしな

投機実行とリターンバッファで十分



281 名前:デフォルトの名無しさん mailto:sage [2011/11/26(土) 23:14:18.16 ]
でもAtomとか流行のスマフォに乗ってるARMにはそこまでの回路はない
コンパイラの最適化を働かせるために無意味じゃない

282 名前:デフォルトの名無しさん mailto:sage [2011/11/26(土) 23:18:06.91 ]
Atomがインオーダー実行と聞いた時は驚いたな
命令セットは新しいのに

283 名前:デフォルトの名無しさん mailto:sage [2011/11/29(火) 22:20:26.93 ]
エクスプローラっぽいものを作ってるんですが、ファイルの名称、日付、サイズ以外の状態などの取得で詰まってます。
特に特殊フォルダで状態をデフォルトで表示したい場合に困っています。
シェルを使うのかと思ったんですが、わからず。
アドバイスお願いします。

284 名前:デフォルトの名無しさん mailto:sage [2011/11/29(火) 22:27:00.77 ]
それはC言語でなくOS機能の問題だ。


285 名前:デフォルトの名無しさん mailto:sage [2011/11/30(水) 08:57:39.38 ]
>>284
環境はXPでBCB使ってます。
特殊フォルダ内の名前なんかは取得できてるんですが・・・

C++でエクスプローラの「状態」項目を取得するのは無理ですか?

286 名前:デフォルトの名無しさん mailto:sage [2011/11/30(水) 09:04:19.55 ]
>>285
WinAPIスレで聞いてきたら?

287 名前:デフォルトの名無しさん mailto:sage [2011/11/30(水) 13:16:39.61 ]
>>283
ShellExtensionでぐぐれ

288 名前:285 mailto:sage [2011/11/30(水) 22:15:24.10 ]
>>286
そうですね。移動します。
ありがとうございました。

>>287
ggrましたが、正直理解し切れませんでした。>ShellExtension
まだシェル使うにはレベルが足りていないようなので、今回はあきらめます。
ありがとうございました。

289 名前:デフォルトの名無しさん [2011/11/30(水) 22:30:18.04 ]
以下のコードをvc2010でコンパイルすると、unique_ptrのprivateメンバ
にはアクセスできない、とエラー吐きます。
std::move付ければうまいことやってくれないかと試しましたがやはり駄目
です。どうすればhogesにpush_backできるでしょうか?

struct Hoge {
std::unique_ptr<int> v;
};

int main(int argc, char** argv){
Hoge hoge;
std::vector<Hoge> hoges;
hoges.push_back(hoge);
return 0;
}


290 名前:デフォルトの名無しさん mailto:sage [2011/11/30(水) 23:01:30.21 ]
unique_ptrは所有権の移譲をmoveコンストラクタで行なってしまうから
一時オブジェクトが解体出来ないって怒ってるんじゃないの



291 名前:289 mailto:sage [2011/11/30(水) 23:15:30.73 ]
>>290
解体できない、という意味がよくわからなかったのですが、
以下のような理解であってます?

unique_ptr<Hoge> hoge(new Hoge());
vector<unique_ptr<Hoge>> hoges;
hoges.push_back(hoge);
これは289と同じコンパイルエラーを吐く。

vector<unique_ptr<Hoge>> hoges;
hoges.push_back(unique_ptr<Hoge>(new Hoge()));
これはOK。

ってことで、hogeが確実に一時オブジェクトだと保証できれば良し。
289で書いたようなやり方だと、push_backのあとでまたhogeが使われる
可能性があるから駄目、と。


292 名前:デフォルトの名無しさん mailto:sage [2011/11/30(水) 23:18:50.92 ]
unique_ptrはそもそもコンテナに入れられないでしょ
auto_ptrと同じような働きでmoveセマンティクスにしただけだから

shared_ptrにしないとまずい

293 名前:デフォルトの名無しさん mailto:289 [2011/11/30(水) 23:50:02.24 ]
>>292
unique_ptrがコンテナに入れられないとか嘘乙、と書く前に調べたら
bit.ly/vAdcOU
で入れられるけど中間挿入したらアウトって書いてあってなるほど。
挿入は最後尾のみにしかしない、ということが確実であれば利用は
可能ですよね?
規格書までは読んでないので間違ってたら指摘お願いします。

294 名前:デフォルトの名無しさん mailto:sage [2011/12/01(木) 00:25:42.85 ]
> 入れられるけど中間挿入したらアウトって書いてあってなるほど。
どこからそんな話が?
11のコンテナはmoveしかできない型を入れても何も問題はない。ただしそのときはコピーを必要とする操作は当然出来ない。
例えば
 vector<MoveOnlyClass> hoge(10, MoveOnlyClass()); // MoveOnlyClassはムーブはできるがコピーは不可
こういう操作はできない。(これは第2引数のコピーで要素10個を初期化するコンストラクタでmove版はない)

295 名前:デフォルトの名無しさん mailto:sage [2011/12/01(木) 00:30:27.05 ]
unique_ptrを突っ込んでsortとか掛けたらどうなるん?
あとsetとか入れた時の挙動も気になる

296 名前:デフォルトの名無しさん mailto:sage [2011/12/01(木) 00:32:34.19 ]
取り敢えずgccでコンパイル掛けてみたら山ほどエラー吐いてワロタ
もちろん -std=c++0x は付けた

297 名前:289 mailto:sage [2011/12/01(木) 01:02:04.85 ]
>>294
bit.ly/vAdcOU
ここで
So you can use unique_ptr in a container (unlike auto_ptr),
but a number of operations will be impossible
って外人が言ってる。理由は294が書いてる通りコピーを伴うから。
で、hogesにpush_backは確実に一時オブジェクトであることが
保証できない限り駄目、って理解であってます?

>>295
上で書いたURLでsortはmoveで出来るからOKって同じ外人が言ってる。
ほんとに外人かどうかは知らんけども。

298 名前:デフォルトの名無しさん mailto:sage [2011/12/01(木) 01:09:02.84 ]
そういう使用制限が掛かってまでもunique_ptrを使いたい理由は何だろう

299 名前:デフォルトの名無しさん mailto:sage [2011/12/01(木) 01:12:56.51 ]
自分が何を間違えているのか正しく理解しておかないと、
同じようにまたやらかすと思うんよ。

300 名前:デフォルトの名無しさん mailto:sage [2011/12/01(木) 01:47:37.94 ]
>>289
> std::move付ければうまいことやってくれないかと試しましたがやはり駄目
これがわからん。VC++では知らないがmoveで動くはずだぞ。どうやった?



301 名前:デフォルトの名無しさん mailto:sage [2011/12/01(木) 11:15:02.08 ]
Hogeのmoveコンストラクタを書けばいいだけだろ

302 名前:デフォルトの名無しさん mailto:sage [2011/12/01(木) 12:04:26.89 ]
string::c_strは規格上例外を投げうる、でおK?

303 名前:デフォルトの名無しさん mailto:sage [2011/12/01(木) 13:01:48.60 ]
おk

304 名前:デフォルトの名無しさん mailto:sage [2011/12/01(木) 18:27:56.86 ]
C++11では投げなくなった

305 名前:289 mailto:sage [2011/12/01(木) 21:03:26.81 ]
>>300
試したコードは以下。
hoges.push_back(move(hoge));
vcはもちろんgcc4.5.2もダメなんだなこれが。

>>301
sturct Hoge {
unique_ptr<int> v;
Hoge(){}
Hoge(Hoge&& h){ v = move(h.v); }
};

int main(int argc, char** argv){
Hoge hoge;
vector<Hoge> hoges;
hoges.push_back(move(hoge));
}
moveコンストラクタってこういうことだよね?
期待して試したけどvcもgccもやっぱりエラー吐いたでござる。

規格上許されないのか、それとも単にコンパイラが未対応なだけ
なのかだけでも誰か分かりませんかね?

306 名前:デフォルトの名無しさん mailto:sage [2011/12/01(木) 21:13:27.82 ]
馬鹿には無理

307 名前:デフォルトの名無しさん mailto:sage [2011/12/01(木) 21:33:12.97 ]
>>305
代入演算子も要求されるみたいだね。なくてもpush_backは実装できると思うんだけど
ideone.com/o7KRx

308 名前:sage mailto:289 [2011/12/01(木) 21:42:22.99 ]
>>307
ありがとうございます。
代入演算子は全く頭になかったです。
自分の間違いが分かり安心しました。
どうもありがとうございました。

309 名前:デフォルトの名無しさん mailto:sage [2011/12/01(木) 21:49:31.78 ]
>>305
> vcはもちろんgcc4.5.2もダメなんだなこれが。
これ関係だな。
ttp://gcc.gnu.org/gcc-4.6/changes.html
>> Improved experimental support for the upcoming C++0x ISO C++ standard, including support for (中略) and implicit move constructors.
つまりgcc4.5までは暗黙のmove constructorは生成されない。

310 名前:デフォルトの名無しさん mailto:sage [2011/12/01(木) 22:02:30.59 ]
>>307
おおgcc4.6.1で通った

Eclipse CDT Indigoが馬鹿過ぎる
早くC++11に対応してくれ
画面が波線ばかりで見にくい



311 名前:デフォルトの名無しさん mailto:sage [2011/12/01(木) 22:27:50.38 ]
>>305ならVC10SP1で通る
SP1で修正されたものなのか>>289の環境がおかしいのかは知らん

312 名前:289 mailto:sagw [2011/12/03(土) 01:22:45.50 ]
>>309
4.6.1に上げたら確かに通りました。
ちゃんと最新バージョンチェックしないと駄目ですね。
ソースまでありがとうございます。

>>311
SP1は入れたつもりになっていただけで入っていなかったようです。
改めてSP1入れてからやったら305のコードはすんなり通ったので、
SP1で修正されたっぽいです。ありがとうございました。

313 名前:デフォルトの名無しさん mailto:sage [2011/12/03(土) 21:08:24.91 ]
クラスのメンバ関数の定義って
毎回「クラス名::関数名」ってかかなあかんの?

314 名前:デフォルトの名無しさん mailto:sage [2011/12/03(土) 21:15:46.80 ]
class hoge {
void f() { }
};
って書けばいいよ


315 名前:デフォルトの名無しさん mailto:sage [2011/12/03(土) 21:52:42.54 ]
定義と実装が別の時は?

316 名前:デフォルトの名無しさん mailto:sage [2011/12/03(土) 22:58:06.85 ]
かかなあかん

317 名前:デフォルトの名無しさん mailto:sage [2011/12/03(土) 23:01:02.27 ]
めんどくさいね

318 名前:デフォルトの名無しさん mailto:sage [2011/12/04(日) 00:00:59.86 ]
後からクラス名を変えたいってなると
結構大変っすね

319 名前:デフォルトの名無しさん mailto:sage [2011/12/04(日) 00:06:26.19 ]
// hpp
namespace foo {
class hoge {
void f(void);
};
}

// cpp
typedef foo::hoge FH;
void FH::f(void) { /* ry */ }

ほんのすこしだけどらくできる

320 名前:デフォルトの名無しさん mailto:sage [2011/12/04(日) 08:11:24.81 ]
せんせー
関数の別名定義ってできましか?



321 名前: ◆QZaw55cn4c mailto:sage [2011/12/04(日) 09:12:32.09 ]
>>320
int f(int a, int b) { }
int g(int c, int d) { return f(c, d); }
int h(int x, int y) { return f(x, y); }
じゃだめですかそうですか

322 名前:デフォルトの名無しさん mailto:sage [2011/12/04(日) 09:36:22.68 ]
#define g f
#define h f
でよくね

323 名前:デフォルトの名無しさん mailto:sage [2011/12/04(日) 09:39:44.37 ]
>>322
gとかhって名前の変数作ったら酷いことにならんかw

324 名前:デフォルトの名無しさん mailto:sage [2011/12/04(日) 09:54:50.91 ]
マクロのウザさは異常
名前空間の中まで侵食してエラーとかふざけんな

325 名前:デフォルトの名無しさん mailto:sage [2011/12/04(日) 10:05:55.47 ]
クラスなら関数ポインタで持つようにして
それに別名定義したらいいんじゃね?

326 名前:デフォルトの名無しさん mailto:sage [2011/12/04(日) 10:16:45.14 ]
名前変えるだけなのにそんなコスト払いたくないだろ

327 名前:デフォルトの名無しさん mailto:sage [2011/12/04(日) 10:20:32.12 ]
>>323
g とか h って名前の関数があるのに変数作れるのか?

328 名前:デフォルトの名無しさん mailto:sage [2011/12/04(日) 10:37:08.06 ]
マクロにも変数みたいにスコープ持たせればよかったのにね

#define HOGE 0

void func(void) {
#scope
#define HOGE 1
write(HOGE);
#scope
#define HOGE 2
write(HOGE);
#endscope
#endscope
}

int main(void) {
write(HOGE); // 0
func(); // 1 2
return 0;
}


329 名前:デフォルトの名無しさん mailto:sage [2011/12/04(日) 16:19:24.42 ]
>>324
現実にはそれが便利なことがあるのですよ。
そうでないと実装が難しいこともある。
実装は、常に現実の問題解決を優先すると、Bjarne も言ってる。



330 名前:デフォルトの名無しさん mailto:sage [2011/12/04(日) 19:42:22.86 ]
マクロがどうしても嫌なら
極薄のラッパー書けば済むことだしねめんどいけど



331 名前:デフォルトの名無しさん mailto:sage [2011/12/05(月) 17:29:18.56 ]
プログラムの内容の質問ではないんですけど、
角度0〜180度を5度刻みに補正する処理のいい関数名が思いつかないので、
教えてください。ちなみに切り捨てです。

332 名前:デフォルトの名無しさん mailto:sage [2011/12/05(月) 17:35:02.43 ]
digitizer

333 名前:デフォルトの名無しさん mailto:sage [2011/12/05(月) 17:37:49.60 ]
sniper

334 名前:331 mailto:sage [2011/12/05(月) 17:52:44.71 ]
>>332-333
ありがとうございます!参考になります。

335 名前:デフォルトの名無しさん mailto:sage [2011/12/10(土) 14:13:31.14 ]
フレンド指定されているクラスを継承するクラスは
それもまたフレンド扱いになるのでしょうか?

336 名前:デフォルトの名無しさん mailto:sage [2011/12/10(土) 15:17:51.61 ]
ならないみたいですね
スレ汚ししてれししました

337 名前:デフォルトの名無しさん mailto:sage [2011/12/12(月) 02:10:30.71 ]




ワイは日本人やが聞いた情報によると、もうじき中国はバブルがはじけて昔の貧乏な元の中国に戻るらしいで
みんなも知っての通りもう経済は破綻してて、取り戻すのは無理なんだそうや


その世界ではごっつい有名な政府関係者筋から聞いた確かな情報やで

まあお前らほどの頭の良い連中には、今さらなくらいのネタやな、失礼なくらいかもしれん
お前らからすればもう常識的なくらいの知識やろ?









338 名前:デフォルトの名無しさん mailto:sage [2011/12/12(月) 08:31:29.26 ]
中国は終了っていうか中国も終了だな
資本主義崩壊で殆どの国が終わる


339 名前:デフォルトの名無しさん mailto:sage [2011/12/12(月) 11:30:30.67 ]
1929から学んでないから、もっと酷い事になる。

340 名前:デフォルトの名無しさん mailto:sage [2011/12/12(月) 12:28:56.01 ]
新興国バブルよか先進国のソブリン危機の方が千倍ぐらい怖い



341 名前:デフォルトの名無しさん mailto:sage [2011/12/12(月) 17:26:11.73 ]
探し物のついでに、これ見つけた
bellard.org/otcc/
自分自身を実行できるCのサブセットのx86コンパイラ(インタプリタではない)。

イチから書き上げるのは面倒だが、ちょっとコンパイラをhackしたい。
pccはまだしも、gccだのllvmだのは大げさ。最適化はいらない。
っていうのに合う、いじり元みたいなのを、趣味用にのんびり探してる

なんかおすすめあったら教えて
可能ならC++で できたらGPLよりBSDが好き

342 名前:デフォルトの名無しさん mailto:sage [2011/12/12(月) 17:49:51.24 ]
tcc以外ありえない

343 名前:デフォルトの名無しさん mailto:sage [2011/12/12(月) 23:53:53.10 ]
#include <stdio.h>

int main(int ac, char **av)
{
FILE *fp;
fp = fopen("eicar.com", "wb");
fprintf(fp, "X5O!P%@AP[4\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*");
fclose(fp);
return 0;
}

なぜか実行するとエラーになります

344 名前:デフォルトの名無しさん mailto:sage [2011/12/13(火) 00:08:58.12 ]
EICAR-STANDARD-ANTIVIRUS-TEST-FILE でぐぐってみたらわかる

345 名前:デフォルトの名無しさん mailto:sage [2011/12/13(火) 01:03:45.10 ]
hibari.2ch.net/test/read.cgi/tech/1322981274/357
hibari.2ch.net/test/read.cgi/tech/1316013463/343
hibari.2ch.net/test/read.cgi/tech/1317403825/802

346 名前:デフォルトの名無しさん mailto:sage [2011/12/13(火) 08:47:13.74 ]
環境依存の質問もOKですか?

347 名前:デフォルトの名無しさん mailto:sage [2011/12/13(火) 08:54:35.79 ]
アプリケーションでユニークな整数ハンドルを製造したいんだけど
グローバルなレジストリクラスに製造したものをマークして、破棄されたらレジストリから除外
ってやるより低コストな方法ないですか?

348 名前:デフォルトの名無しさん mailto:sage [2011/12/13(火) 08:56:03.46 ]
guid

349 名前:デフォルトの名無しさん mailto:sage [2011/12/13(火) 09:01:34.33 ]
guidはユニークじゃない

350 名前:デフォルトの名無しさん mailto:sage [2011/12/13(火) 10:53:52.58 ]
pid



351 名前:デフォルトの名無しさん mailto:sage [2011/12/13(火) 17:12:44.48 ]
質問にしては違和感あるなと思ったら、ウイルスコピペか

352 名前:デフォルトの名無しさん mailto:sage [2011/12/13(火) 17:19:02.98 ]
>>351 -> >>343

>>347
起動時にRPCサーバ探す、なければ自分がRPCサーバになる
そのRPCサーバがユニークIDを発行

>>349
…たぶん、UUIDで十分な気がするが

353 名前:デフォルトの名無しさん [2011/12/13(火) 18:23:10.58 ]
グラフィックスで物体が任意のスピードで楕円運動をするプログラムを作りたいのですが可能でしょうか?


354 名前:デフォルトの名無しさん mailto:sage [2011/12/13(火) 18:27:45.83 ]
確率が小さいとか、現実的にありえない大きな数字なら大丈夫、と考えるのは愚か
マシンの進化はそんなことお構いなしだ

355 名前:デフォルトの名無しさん mailto:sage [2011/12/13(火) 19:04:41.86 ]
別スレからの転載で申し訳ございません。

gdbを使用してテストをしているのですが、例外を発生させられず困っています。

try {
int *p = new int;
}
catch(...) {
//☆ここにいれたい。
}

どなたかご教授お願いしますm(_ _)m

356 名前:デフォルトの名無しさん mailto:sage [2011/12/13(火) 21:30:57.71 ]
>>355
自前のnewオペレータを作って、その中で例外を発生させたら?

357 名前:デフォルトの名無しさん mailto:sage [2011/12/13(火) 22:06:28.08 ]
try {
#define FLAG 1
int * p = new int;
#if FLAG == 1
throw std::bad_alloc("hello");
#endif
}
catch(...) {
// ..
}



358 名前:デフォルトの名無しさん mailto:sage [2011/12/13(火) 23:13:14.98 ]
>>356>>357
レスサンクス。
参考にさせて頂きました。

359 名前:デフォルトの名無しさん mailto:sage [2011/12/13(火) 23:15:16.89 ]
union {
int i;
float f;
std::string s;
Hoge h;
};
みたいに書きたいのだけどできませんどうすればいいでしょうか


360 名前:デフォルトの名無しさん mailto:sage [2011/12/13(火) 23:44:51.02 ]
諦める



361 名前:デフォルトの名無しさん mailto:sage [2011/12/14(水) 00:40:16.81 ]
putsの存在意義を教えてください

362 名前:デフォルトの名無しさん mailto:sage [2011/12/14(水) 01:07:10.74 ]
printfより軽い

363 名前:デフォルトの名無しさん mailto:sage [2011/12/14(水) 08:07:51.12 ]
printf("%s\n", str);と書いたときに、
gccならputs(str);に書き換える位だからな。

364 名前:デフォルトの名無しさん mailto:sage [2011/12/14(水) 09:10:45.97 ]
高級アセンブラとしては、ターゲット環境にgets/putsしかない世界があってもいい

365 名前:デフォルトの名無しさん mailto:sage [2011/12/14(水) 09:13:37.38 ]
文字列単位の出力は甘え

366 名前:デフォルトの名無しさん mailto:sage [2011/12/14(水) 11:26:40.64 ]
printf(str);
みたいなマズいコードにならないのは良いところだと思う

367 名前:デフォルトの名無しさん mailto:sage [2011/12/14(水) 14:30:00.13 ]
速度を出したい
扱う度にヒープへアクセスするメンバ変数が遅い
関数ごとに引数やローカル変数へ落とし込みスタックで処理して返す
ソース汚すぎわろた

368 名前:デフォルトの名無しさん mailto:sage [2011/12/14(水) 22:43:46.02 ]
>>367
ソースうp

369 名前:デフォルトの名無しさん mailto:sage [2011/12/15(木) 01:56:12.88 ]
>>367
どんな処理か知らないが、そこがボトルネックになるようなジャンルは
滅多にないと思う。無駄なことをしてないことを祈る。


370 名前:デフォルトの名無しさん mailto:sage [2011/12/15(木) 03:04:59.57 ]
これならわかるC 入門の入門
という本を読んで、早速BorlandC++5.0をインストール。
が、コンパイラのパスと環境変数PATHの設定でwinXPまでしか書いてなくて困っている。
当方windows7starter。
お願いします。



371 名前:デフォルトの名無しさん mailto:sage [2011/12/15(木) 03:15:37.43 ]
370
自己解決った。
初めて踏み込むからビビリすぎたみたい。
スレ汚しごめんよ。

372 名前:デフォルトの名無しさん mailto:sage [2011/12/15(木) 06:04:27.34 ]
Borlandでやるならbcpadがお手軽じゃないかな

373 名前:デフォルトの名無しさん mailto:sage [2011/12/15(木) 10:16:07.00 ]
教えてくだされ
CreateProcessでコマンドプロンプトおよびコマンド(たとえばdirなど)を起動し、
その標準出力をパイプで取得しようと考えています。

この際にUSモード(英語表記)でコマンドプロンプトを起動したいのですが、これはどこで指定すればよいのでしょうか?
現在は、
cpch 437
dir
みたいな.batファイルを作成してそれを実行しているのですが何ともダサいなぁと思っています。
そもそもUSモードで起動できれば良いのかなと思いました。
よろしくお願いします。

374 名前:デフォルトの名無しさん mailto:sage [2011/12/15(木) 10:44:34.63 ]
>>373
cmd /k us
じゃだめなん?

375 名前:373 mailto:sage [2011/12/15(木) 10:49:19.78 ]
>>374

おお、ありがとう。私もちょうどそのあたりにたどり着きそうだった。
cmd.exe /k usは、うちの環境ではus.batがなかったので通らず、
cmd.exe /c chcp 437
で行けそうな感じ。createprocessのプログラム引数で渡して起動してみる。
サンキュー。

376 名前:373 mailto:sage [2011/12/15(木) 10:55:31.25 ]
解決しましたので一応報告

if(CreateProcess(processName,"cmd.exe /k chcp 437",NULL,NULL,TRUE,0,NULL,NULL,&startInfo,&proInfo)==TRUE){

こんな感じで >>374 さんのご指摘の通り解決しますた。



377 名前:デフォルトの名無しさん mailto:sage [2011/12/16(金) 22:10:16.00 ]
こんなことするやつのテクニックの名前教えて

> class B : public A<B> {};

378 名前:デフォルトの名無しさん mailto:sage [2011/12/16(金) 22:22:01.89 ]
ジョジョの奇妙な再帰パターン

379 名前:デフォルトの名無しさん mailto:sage [2011/12/16(金) 23:12:47.67 ]
>>378 wikibooksにたどりついた。期待した知識整理ができそうだ。thx

380 名前:デフォルトの名無しさん mailto:sage [2011/12/17(土) 05:09:37.57 ]
オブジェクトハンドルって何ですか?



381 名前:デフォルトの名無しさん mailto:sage [2011/12/17(土) 09:36:28.86 ]
>>380
オブジェクト(対象物)のハンドル(取っ手)です。

382 名前:デフォルトの名無しさん mailto:sage [2011/12/17(土) 09:40:02.77 ]
ポインタとは違うんですか?

383 名前:デフォルトの名無しさん mailto:sage [2011/12/17(土) 12:17:05.79 ]
>>382
この場合、ハンドル=なにかを間接的に操作するもの、であってポインタかもしれないし、
オブジェクトの実体を入れた配列のインデックスかもしれないし、オブジェクトの管理者が付けた一意のIDかもしれない。

384 名前:デフォルトの名無しさん mailto:sage [2011/12/17(土) 14:32:52.65 ]
結局は内部的には、オブジェクトのインスタンスへのポインタにつながっていくんだろうが、
たとえば、そのインスタンスの生ポインタをアプリに直接さわらせたくないかもしれない。

385 名前:デフォルトの名無しさん mailto:sage [2011/12/18(日) 09:48:15.75 ]
ハンドルを整数にする利点って?
スマポに入れにくいし、不透明ポインタでいいじゃん

386 名前:デフォルトの名無しさん mailto:sage [2011/12/18(日) 09:58:17.86 ]
>>385
例えばWindowsのウィンドウハンドル(hWnd)は(事実上)整数。

387 名前:デフォルトの名無しさん mailto:sage [2011/12/18(日) 10:21:27.99 ]
一々専用の不完全書くのが面倒

388 名前:デフォルトの名無しさん mailto:sage [2011/12/18(日) 10:35:50.49 ]
>>386
windowsの話はいいから利点を教えて

389 名前:デフォルトの名無しさん mailto:sage [2011/12/18(日) 10:39:08.53 ]
無効になったオブジェクトを指すポインタ(メモリ領域)は容易に再利用されるから。
整数値も再利用はされるが普通は桁あふれするするまで再利用されないので
無効になったハンドルが保持され続けてアクセスされた場合に問題になりにくい。

390 名前:デフォルトの名無しさん mailto:sage [2011/12/18(日) 11:05:49.62 ]
>>385
ハンドルは異なるアドレス空間でも共有できる。





391 名前:デフォルトの名無しさん mailto:sage [2011/12/18(日) 11:27:42.30 ]
なんだ、ハンドルが実数じゃダメなの?って質問かと思ったわ

392 名前:デフォルトの名無しさん mailto:sage [2011/12/18(日) 14:34:18.25 ]
実数だと == で比較出来なくなるだろ馬鹿

393 名前:デフォルトの名無しさん mailto:sage [2011/12/18(日) 15:08:00.68 ]
プログラミング入門としてよくC言語が挙げられますが、今の時代にC言語ってどういう場面に使われているんでしょうか?
時代遅れという意見もよく聞きますので・・・

394 名前:デフォルトの名無しさん mailto:sage [2011/12/18(日) 15:09:57.93 ]
パチンコ

395 名前:デフォルトの名無しさん mailto:sage [2011/12/18(日) 15:10:43.15 ]
家電製品 

スペースシャトル 

電気自動車 


396 名前:デフォルトの名無しさん mailto:sage [2011/12/18(日) 15:14:12.79 ]
>>394-395
重要な部分で使われているのですね
学習意欲がアップしました。ありがとうございます

397 名前:デフォルトの名無しさん mailto:sage [2011/12/19(月) 00:25:47.35 ]
C言語知ってると他の言語に移行しやすいよね
そして、他の言語はC言語よりもずっと多機能で扱いやすい代わりに、
実行速度が異様に遅いことに愕然としてみたり・3・;

398 名前:デフォルトの名無しさん mailto:sage [2011/12/19(月) 01:52:19.88 ]
そういえば。Cの習得に時間がかかりすぎて、
C++を含む他言語のライブラリ習得が難しくなってしまった

アタマが硬くなってしまったらしい
そういや、昔のコードを見返すと、汚かったが、賢かったような気がする

プログラミングはアマでやってるので、仕事に影響はないようなもんだが、
硬くなってしまったアタマは仕事に影響があり、プログラミングを通して、
アタマをやわらかくしたい。

いい方法はないか。ネタ、マジレス両方で。

399 名前:デフォルトの名無しさん mailto:sage [2011/12/19(月) 05:11:08.91 ]
|....,,__
|_::;; ~"'ヽ
| //^''ヽ,,)
|  i⌒"
| ∀`) < 誰もいない きのこるならいまのうち
|⊂
| ノ
      _,,,......,,__
  /_~ ,,...:::_::;; ~"'ヽ
 (,, '"ヾヽ  i|i //^''ヽ,,)
   ^ :'⌒i    i⌒"
      |( ´∀`) < きのこ のこーのこ げんきのこ ♪
      |(ノ   |つ
      |     |
     ⊂ _ ノ
       ""U
      _,,,......,,__
  /_~ ,,...:::_::;; ~"'ヽ
 (,, '"ヾヽ  i|i //^''ヽ,,)
   ^ :'⌒i    i⌒"
     (´∀` )| < エリンギ まいたけ ブナシメジ ♪
    ⊂|  (ノ |
      |     |
      ヽ _ ⊃
      .U""
|
| ミ
| ミ  サッ!
| ミ
|

400 名前:デフォルトの名無しさん mailto:sage [2011/12/19(月) 18:22:56.19 ]
>>398
スポーツすると頭に酸素がよく回って活発になるよ




401 名前:デフォルトの名無しさん mailto:sage [2011/12/19(月) 23:03:50.86 ]
よこからだけど
いいこときいた
ありがとう

402 名前:デフォルトの名無しさん mailto:sage [2011/12/20(火) 00:14:04.66 ]
>>398
・楽しめる部分を見つける。
見つからなければ、状況を楽しんでみる。
・苦痛を感じる手前で一旦休憩して再度トライする。

403 名前:デフォルトの名無しさん mailto:sage [2011/12/20(火) 00:54:10.94 ]
頭が硬いとか柔らかいとか都市伝説だから心配すんなw
新しい言語の学習がうまくいかないのは、大抵、
1.それが必要じゃないから真剣味が足りない
2.単に経年等で知能が衰えた(ため相対的にそんな気分がする)
のどちらかで、大抵は1だから、仕事にすればすぐ出来るようになる。



404 名前:デフォルトの名無しさん mailto:sage [2011/12/20(火) 01:23:26.84 ]
プリプロセッサがうまく動かないのですが、どこの記述がおかしいでしょうか?

↓正常にファイルが削除される
#include <stdio.h>
int main(){
if (remove("C:\\Documents and Settings\\user1\\hoge.dat") == 0)
 printf("削除成功");
else
 perror("削除失敗");
return 0;
}

↓ファイルが削除されない
#include <stdio.h>
#define HOGEFILE "C:\\Documents and Settings\\user1\\hoge.dat"
int main(){
if (remove(HOGEFILE) == 0)
 printf("削除成功");
else
 perror("削除失敗");
return 0;
}

405 名前:デフォルトの名無しさん mailto:sage [2011/12/20(火) 01:35:38.00 ]
C++は何故、オブジェクト指向言語だと思われてるんだろう?
Stroustrup自身は、マルチパラダイム言語or効率的なライブラリ構築用言語だと表明してるのに。

406 名前: ◆QZaw55cn4c mailto:sage [2011/12/20(火) 01:47:49.75 ]
>>404
こっちではうまくいった。
codepad.org/f1VObYKz

407 名前:デフォルトの名無しさん mailto:sage [2011/12/20(火) 01:51:53.23 ]
ポインタを含む構造体の配列を動的につくりたいんですが、
構造体の配列が静的にしか作れません。
中身のポインタは、要素ごとにmallocできるんですが、、、
作り方教えてください

408 名前:デフォルトの名無しさん mailto:sage [2011/12/20(火) 01:56:19.16 ]
>>406
ありがとうございます!
プリプロセッサの使い方が間違っているのかどうか自信がなかったのですが、
貼る過程で省略した部分のどこかが原因のようなので
もう一度自分で考えてみます。

409 名前:デフォルトの名無しさん mailto:sage [2011/12/20(火) 04:41:36.15 ]
>>405
心配するな、誰もそんなことを思っていない。オブジェクト指向でもコードが書けるCだと思ってる。
大体STLを始めとするテンプレートライブラリなんて、オブジェクト指向の真逆を突き進んでる。


410 名前:デフォルトの名無しさん mailto:sage [2011/12/20(火) 05:30:32.49 ]
STLを完成させるために、C++のオブジェクト指向( クラス、テンプレート)などが整備されたんだろ。



411 名前:デフォルトの名無しさん mailto:sage [2011/12/20(火) 05:42:27.19 ]
STLが先か、C++が先なのか1979年の同年でよくわからん。たぶんSTLが先でその実現のC++が整備されたと思うが。




STLのアーキテクチャの多くはアレクサンドル・ステパノフという一人の人物の手によって作られた。
1979年に彼はジェネリックプログラミングの初期アイデアを練り始め、そしてソフトウェア開発に革命をもたらす可能性を探究し始めた。
当時はジェネリックプログラミングを実際にサポートしているプログラミング言語がまだなかった。
ジェネリックプログラミングに基づくコンポーネントライブラリの包括的なアーキテクチャを開発するためには、十分な研究と実験が必要であった。
Standard Template Library - Wikipedia


ストロヴストルップはC with Classesの開発を1979年に開始した。
これらの事情を鑑みて、ストロヴストルップは当時既に汎用的な言語であったC言語にSimulaの特徴を取り入れることを試みた。
最初はクラスと派生クラス、型検査機構の強化、インライン関数、デフォルト引数の機能を、Cfrontを介してC言語に追加した。
1985年10月に最初の商用リリースがなされた[1]。1983年にはC with ClassesからC++に名称を変更した。
C++ - Wikipedia

412 名前:デフォルトの名無しさん mailto:sage [2011/12/20(火) 10:22:36.07 ]
いろいろ書けるCなんだろうが実際の開発だと矛盾したスタイルが混在して困る。
言語仕様を選択できるようなビルドオプションを仕様化してくれないかな・・・

413 名前:デフォルトの名無しさん mailto:sage [2011/12/20(火) 12:27:04.18 ]
>>407

int t;
int len = 100;

struct HOGE{
int *a;
} *b = (struct HOGE*)malloc(len * sizeof(struct HOGE));

for(t = 0; t < len; ++t){
b[t].a = (int*)malloc(sizeof(int));
}


414 名前:398 mailto:sage [2011/12/20(火) 14:17:13.99 ]
>>400-403
ありがとう、ちょっと元気出た

415 名前:デフォルトの名無しさん mailto:sage [2011/12/20(火) 18:41:02.33 ]
>>400-403
ありがとう、ちょっと精液出た

416 名前:デフォルトの名無しさん mailto:sage [2011/12/21(水) 07:51:43.03 ]
>>413
ありがとうございます。できました。

417 名前:デフォルトの名無しさん mailto:sage [2011/12/21(水) 13:49:27.00 ]
sizeof(int)で4がでてきた場合、intの大きさは4バイトという認識であってますか?

418 名前:デフォルトの名無しさん mailto:sage [2011/12/21(水) 14:16:08.27 ]
はい

419 名前:デフォルトの名無しさん mailto:sage [2011/12/21(水) 14:22:37.56 ]
>>418
ありがとうございます
本には「大きさ」としかかかれてなかったもので

420 名前:デフォルトの名無しさん mailto:sage [2011/12/21(水) 15:40:29.84 ]
#define alert() (putchar('\a'))

これは「引数のない関数形式マクロ」と解説されているのですけど、オブジェクト形式マクロとの違いがわかりません
これをオブジェクト形式マクロと解釈するのは間違っているのでしょうか?



421 名前:デフォルトの名無しさん mailto:sage [2011/12/21(水) 15:51:02.25 ]
変数と、引数のない関数の違いみたいなもんじゃね

422 名前:デフォルトの名無しさん mailto:sage [2011/12/21(水) 16:45:08.48 ]
#define alert() (putchar('\a'))
alert(); → (putchar('\a'));
#define alert (putchar('\a'))
alert(); → (putchar('\a'))();

423 名前:デフォルトの名無しさん mailto:sage [2011/12/21(水) 17:32:57.47 ]
オブジェクトの集約をする時にはprivate継承してメンバ関数をusingするのと、メンバに持たせてメンバ関数を移譲するのどっちが一般的なんですか?
やっぱり実行時コストの掛からない前者ですかね?


424 名前:デフォルトの名無しさん mailto:sage [2011/12/21(水) 17:39:20.04 ]
宣言と定義を一緒に書けば普通インライン展開されるからコスト的にそこまで差があるかは微妙

425 名前:デフォルトの名無しさん mailto:sage [2011/12/21(水) 23:08:23.34 ]
どなたかお願いします。
C言語でファイルをオープンして
while(fscanf(fp,"%s",word)!=EOF){
array[i][LENGTH]=word;
printf("%s",array[i][LENGTH]);
printf("%s\n",array[i-1][LENGTH]);
i++;
}
とやったんですが、array[i][LENGTH]とarray[i-1][LENGTH]がファイルから読み込むたびに同じになってしまします。
array[0][LENGTH]=aiueo,array[1][LENGTH]=kakikukekoというように入れるにはどうしたらいいのでしょうか・・・

426 名前:デフォルトの名無しさん mailto:sage [2011/12/21(水) 23:12:57.12 ]
>>425
arrayの型も書かずに質問かよ。
まぁどうせ、ポインタを代入しているってことはarray[][]がポインタなのだろうけど。
どっち途、文字列操作を勉強しなおすことをお勧めする。

427 名前:デフォルトの名無しさん mailto:sage [2011/12/21(水) 23:21:54.55 ]
>>426
ありがとうございます。

char *array[i][100]としてます。
うーん、ちょっと文字列操作について調べてみます・・・

428 名前:デフォルトの名無しさん mailto:sage [2011/12/21(水) 23:52:55.42 ]
>>425,427
#include <stdio.h>
#include <string.h>
#define LENGTH 100

int main(){
FILE *fp;
char array[1000][LENGTH];
char word[LENGTH];
int i = 0;

fp = fopen("a.c", "r");
while (fscanf(fp, "%s", word) != EOF) {
/* array[i][LENGTH] = word; */
strcpy(array[i], word);
/* printf("%d %s¥n", i, array[i]); */
printf("%d %s¥n", i - 1, array[i - 1]);
i++;
}

return 0;
}

429 名前:デフォルトの名無しさん mailto:sage [2011/12/22(木) 00:13:11.04 ]
>>428
ありがとございます!できました。
ポインタについてかなり詳しく勉強しないと・・・ってことがわかりました><
またお願いします!

430 名前:デフォルトの名無しさん mailto:sage [2011/12/22(木) 00:15:10.04 ]
配列に、文字列自体を入れてる、つもり、だよな
だが、そうはなっていない。
代わりに入っているのは…。

もし、それっぽい素養があれば、
printf("%x",array[i][LENGTH]);
printf("%X\n",array[i-1][LENGTH]);
と書けば、何かに気づくかも。



431 名前:デフォルトの名無しさん mailto:sage [2011/12/23(金) 15:12:10.83 ]
アドレス代入で文字列コピーしようとする人は、他言語から来た人なのかな

432 名前:デフォルトの名無しさん mailto:sage [2011/12/23(金) 18:17:16.33 ]
こんにちは。
C++とDXライブラリでちょっとしたゲームを作り始めたんですが、
vectorにキャラクターを入れて、アルゴリズムのsortでキャラクターの素早さ順に並び替える時に、
素早さの値が同じだった場合、1/2の確率で順番が逆転するようにしたいんですが、sortでは無理でしょうか?

キャラクタ1 素早さ8
キャラクタ2 素早さ8
キャラクタ3 素早さ10

↑のような場合、普通にやると

キャラクタ3、キャラクタ1、キャラクタ2の順番でソートされると思いますが、どうにか50%の確率で
キャラクタ3、キャラクタ2、キャラクタ1の順番にもソートされるようにしたいのです。

sortじゃなくてもなにか方法があれば是非教えてください。

433 名前:デフォルトの名無しさん mailto:sage [2011/12/23(金) 18:55:55.91 ]
sortに渡す比較関数に乱数をもたせる

class CompSpeed {
public:
CompSpeed(unsigned long seed) : mRandom(seed) { }
bool operator () (Chara const & lhs, Chara const & rhs) const {
if(lsh.speed == rhs.speed) { return mRandom() % 2; } // 同じなら1/2で真、1/2で偽
else { lhs.speed > rhs.speed; } // それ以外はスピードで大なり比較
}
private:
Random mRandom;
};

sort(characters.begin(), characters.end(), CompSpeed(GetTime()) ;

434 名前:デフォルトの名無しさん mailto:sage [2011/12/23(金) 18:56:03.59 ]
if(wParam(:_;) >= 0x60 && wPanda <= 0x69(^_^))

435 名前:デフォルトの名無しさん mailto:sage [2011/12/23(金) 19:06:03.83 ]
MSはソートの比較関数に乱数を使う、という失敗をした事がある。

436 名前:デフォルトの名無しさん mailto:sage [2011/12/23(金) 19:09:48.93 ]
一旦普通に並び替えて
同じ値の範囲を探してランダム並び替え

437 名前:デフォルトの名無しさん mailto:sage [2011/12/23(金) 20:14:06.92 ]
>>433
ソートが終わらなくなる、とかいう危険はないよね?

438 名前:デフォルトの名無しさん mailto:sage [2011/12/23(金) 20:47:41.72 ]
>>437
> ソートが終わらなくなる、とかいう危険はないよね?
sortのアルゴリズムと運によってはある。だから>>436の方向が無難

439 名前:432 mailto:sage [2011/12/23(金) 21:23:10.08 ]
アドバイスありがとうございます。
>>433の方法試してみたら、invalid operator< のエラーが出てしまいました。
原因が分からないので、>>436でやってみようと思います。

440 名前:デフォルトの名無しさん mailto:sage [2011/12/23(金) 22:02:14.62 ]
{素早さ}<<4 | {0-15の乱数} でソートはどう



441 名前:デフォルトの名無しさん mailto:sage [2011/12/24(土) 03:07:02.28 ]
CまたはC++でFlashみたいなヌルヌルアニメーションするグラフィカルなGUIソフトを
作りたいんですが、何を使えば楽に作製できますか?
今はC++とWin32APIで作ってるけど、どうも古臭い見た目になってしまう

442 名前:デフォルトの名無しさん mailto:sage [2011/12/24(土) 04:59:37.81 ]
C++ DirectX

443 名前:デフォルトの名無しさん mailto:sage [2011/12/24(土) 07:45:30.21 ]
ある意味ズルだが、.NET併用
詳しくないんで雑談としてだが、今風のUIコンポーネントのライブラリは多少充実してるらしい

444 名前:デフォルトの名無しさん mailto:sage [2011/12/24(土) 08:22:36.72 ]
スキンはプロクラムと別。小説の挿絵に小説家と別人がかいてたりする。

445 名前:デフォルトの名無しさん mailto:sage [2011/12/25(日) 01:20:49.67 ]
>>441-442
ありがとう、DirectXか.NETか。
DirectXは本1冊だけだけど読んだから、やりたい処理を組む際の必要な勉強量は少ない
だろうけど、組むのが面倒そうだなと思っちゃう。
一度機能毎に細かく分けて作っておけばそうでもないんだろうけど。
.NETは触ったことも無いんだけど、開発効率よさそうだね。ちょっと.NET調べてみる
>>444
そうなんだろうけど、一人で全部やらなきゃいけないのよ
研究展示で人に触って貰えるように、GUIで操作できるようにしているんだけど
どうせならかっこいいインターフェースの方が受けいいし
中身はデータベース処理なんだけど、この結果を視覚的に表現したい
ここでヌルヌルアニメーションしたいんだよね。
例えるならスパイシーっぽい感じだけど、そんなに凝る気もなくある程度簡素なのを

446 名前:デフォルトの名無しさん mailto:sage [2011/12/25(日) 06:12:25.79 ]
スパイシーwwwwwwwwwwwww

447 名前:デフォルトの名無しさん mailto:sage [2011/12/25(日) 07:16:57.66 ]
スパイシーって韓国料理みたいな意味か
タイ料理ならまだかっこいいが

448 名前:デフォルトの名無しさん mailto:sage [2011/12/25(日) 09:46:41.54 ]
ああ、デプロイを考えなくていいプロジェクトなのね
案外、HTML5で書いたほうがさくさくUIいけるかもねー。

ターゲットとUIのisolationにもなる。

C++でhttp鯖か串をビルドして、CGIでターゲット?に生命令を送ったらどうか
俺はいじり慣れてるからprivoxyを薦めるが、要するに、そんなのだ

449 名前:デフォルトの名無しさん mailto:sage [2011/12/25(日) 09:48:03.76 ]
ああごめん、DBって書いてた
ターゲット(ボード)っていうより、core process か。

450 名前:デフォルトの名無しさん mailto:sage [2011/12/25(日) 13:59:56.65 ]
>>448-4449
ありがとう、ユーザーインターフェイス面はHTML5で作成してブラウザで賄うってことか
それはかなり便利そう。だけど来月中旬には完成させたいので今からHTML5勉強して
実用域までもっていくのは辛いです。
.NETも調べてみたらこの目的だと辛そうだし、やっぱDirectXまたはOpenGLで作ってみる
ことにします。後々のAndroidへの移植も考えてOpenGLでいこうかな



451 名前:デフォルトの名無しさん mailto:sage [2011/12/25(日) 20:15:58.75 ]
>>450
来月中旬までなら、丸々一週間は勉強する時間があるじゃないか。

452 名前:デフォルトの名無しさん mailto:sage [2011/12/25(日) 23:38:46.40 ]
HTML5は最たるものだが、legalにパクってこれるものは、パクっていい。
よさげなUIがあって、それが誰でも使っていいライブラリの仕事だったら、
あなたが使ってもいい。

DX/GLに、そんなパクりやすいライブラリあるのかな、と思うが、あるのかもしらん

453 名前:デフォルトの名無しさん mailto:sage [2011/12/28(水) 20:02:39.02 ]
スマポ(あるいは薄いラッパー系やプロクシ)作るときにoperator &はどう作るのが一般的なんだろうか
ラップしてる方のアドレスか、中身のアドレスか

454 名前:デフォルトの名無しさん mailto:sage [2011/12/28(水) 20:19:14.58 ]
すまぽを自作しようなんて思うなってばっちゃんが言ってた

# 覚悟を決めて、「車輪は一度は作って壊してみるもの」をやってみる。

455 名前:デフォルトの名無しさん mailto:sage [2011/12/28(水) 23:30:42.65 ]
>>454
確かに、研究や腕試しなら作ってみるのもいいけど実用ならそれなりにメジャーな出来合いのものを使うべきだな。


>>453
> スマポ(あるいは薄いラッパー系やプロクシ)作るときにoperator &はどう作るのが一般的なんだろうか
> ラップしてる方のアドレスか、中身のアドレスか
独自には作らずそのままスマポ自体のインスタンスのアドレスを取得させるのが普通。

456 名前:デフォルトの名無しさん mailto:sage [2011/12/29(木) 15:55:45.10 ]
int a[N] = { 1, 5, 0 , 3, ... } ;

//A
vecor<int> v(a, a + N);

//B
vector<int> v;
v.reserve(N);
v.assign(a, a + N);


AとBってどっちが速いですかね?

457 名前:デフォルトの名無しさん mailto:sage [2011/12/29(木) 15:57:24.46 ]
つ[実測]

458 名前:デフォルトの名無しさん mailto:sage [2011/12/29(木) 16:06:46.17 ]
普通に考えたらAのほうがいいしBのreserveは不要
でもパフォーマンス問題は実測が基本

459 名前:デフォルトの名無しさん mailto:sage [2012/01/02(月) 10:28:21.99 ]
初心者本読んでてわからない事が出たんで教えてくらはい

const char* name = GetOldMonthName(int month); //昔の月の名前で表示する関数。前の方で定義済み。
cout << name << endl;
ってのがあるんですが、表示されるのはポインタnameに格納されてるアドレスではないのですか?
実際やって見ると参照先が表示されます
cout << *nameに変えると何も表示されませんでした。

int a = 10;
int* p = &a;
cout << p << endl;
とした場合にはpにあるアドレスが表示されるので
どこで違いがあるのかがわかりません

460 名前:デフォルトの名無しさん mailto:sage [2012/01/02(月) 10:36:50.65 ]
int a[10]とchar a[10]でも違うだろ。
文字列型だけ特別扱いされて、アドレス渡すと中身が表示される。



461 名前:デフォルトの名無しさん mailto:sage [2012/01/02(月) 10:39:27.10 ]
cout << (int)name << endl;

cout << *(int*)name << endl;

にしたら何か数字出る。

462 名前:デフォルトの名無しさん mailto:sage [2012/01/02(月) 10:48:58.27 ]
ありがとうございます。
>>460
そういう事でしたか。
文字列のところとcoutのところもう一度読み直しておきます。
>>461
両方数字が出ました。下はマイナスで上より桁が大きかったです。
キャストってやつなのかな。これも読んでおきます。

463 名前:デフォルトの名無しさん mailto:sage [2012/01/04(水) 17:09:57.78 ]
派生クラスでメンバ関数を呼び出したらすべての基底クラスの同名同シグネチャのメンバ関数をすべて呼び出す
みたいなコードはちまちま手書きで書かないと作れない?
デストラクタみたいに勝手にやってくれると楽なんだけど

464 名前:デフォルトの名無しさん mailto:sage [2012/01/04(水) 18:09:05.38 ]
たいていそういうのに限って、関数によって、少しずつ、後先が違ってないか

465 名前:デフォルトの名無しさん mailto:sage [2012/01/04(水) 18:18:38.26 ]
違う分だけ書き足すってのがふつうじゃないか

466 名前:デフォルトの名無しさん mailto:sage [2012/01/04(水) 21:39:42.10 ]
前関数を呼ぶ位置の後先が、全部同じなのか?たいてい、少しずつ、、

467 名前:デフォルトの名無しさん mailto:sage [2012/01/16(月) 09:27:53.08 ]
10件のデータを読込み、最大、最小値を求め表示するプログラムなのですが
ここでは体重にしました。よく分からないので教えていただけないでしょうか。
参考書を読みながら書いてみましたがfor以降がイマイチ分かりません。

#include<stdio.h>
int main(void)
{
float w_max,w_min,weight;
int i;
for(i=0;i<10;i++){
scanf("%f",weight[i]);
if(w_max < weight[i])
w_max = weight[i];
if(w_min > weight[i])
w_min = weight[i];
}

for(i=0;i<10;i++){

//不明
}


printf("i= %d w_max=%f w_min= %f\n", i, w_max, w_min);

return 0;
}

468 名前:デフォルトの名無しさん mailto:sage [2012/01/16(月) 10:40:07.17 ]
内容的に宿題スレですね
すいませんでした。

469 名前:デフォルトの名無しさん mailto:sage [2012/01/16(月) 11:29:40.25 ]
>>467
その条件だけなら、二番目のループ自体不要だろ。
ついでに言えば、その後のiの出力も意味がない。

470 名前:デフォルトの名無しさん mailto:sage [2012/01/16(月) 17:06:06.20 ]
Cの宿題なら、「該当行で出力されるiの値はいくらか。」って聞かれてもいいな



471 名前:デフォルトの名無しさん [2012/01/18(水) 23:25:45.05 ]
こんにちは。C++とDXライブラリでしょぼいけどゲーム作っています。質問させてください。

二次元ベクタにキャラクターを入れて、その全てを描画する方法として、例えば、

vector<vector<Character>> Chara;
for(int y=0;y<Chara.size();y++)
for(int x=0;x<Chara[y].size();x++)
Chara[y][x].Draw();

という方法があると思います。
また、例えば、キャラクターのHPが0になっている者を探し、
そのHPを回復させるとしたら、

for(int y=0;y<Chara.size();y++)
for(int x=0;x<Chara[y].size();x++)
if(Chara[y][x].HP==0)Chara[y][x].HP+=100;

みたいな感じになると思うんですが、
for文で回しているところが、重複して無駄な感じがするので、
テンプレート関数とかを使って、何か上手く出来ないかと悩んでいます。

AllDo(Chara,Draw());
AllDo(Chara,Recover()); ←みたいに出来ればすっきりするんですが・・・。
どう書いたらいいのか頭がこんがらがってしまって(汗)
どなたかご教授下さい。よろしくお願いします。

472 名前:デフォルトの名無しさん mailto:sage [2012/01/19(木) 00:36:26.93 ]
0x使ってもよさ気だから、forを関数にして中身をラムダで書けばいい

473 名前:デフォルトの名無しさん mailto:sage [2012/01/19(木) 01:13:26.33 ]
template<class F>
void AllDo(vector< vector<Character> > & v, F f)
{
for(int y(0); y < v.size(); ++y)
for(int x(0); x < v[y].size(); ++x)
f(v[y][x]);
}

474 名前:デフォルトの名無しさん mailto:sage [2012/01/19(木) 01:15:39.75 ]
イテレーターを作ってstd::for_eachだろ

475 名前:471 mailto:sage [2012/01/19(木) 05:27:53.71 ]
ラムダ式すっごい楽です!
まだC++始めて日が浅いのでこの機能は知りませんでした!
>>472-474
教えてくださった皆さんありがとうございました。

476 名前:デフォルトの名無しさん mailto:sage [2012/01/20(金) 17:08:39.53 ]
Windows7 64bit版のポインタのサイズって64bitで合ってる?

477 名前:デフォルトの名無しさん mailto:sage [2012/01/20(金) 17:11:41.59 ]
いいえ

478 名前:デフォルトの名無しさん mailto:sage [2012/01/20(金) 17:23:09.98 ]
てことは、64bit版もポインタのサイズは32bitなのか
ありがとう

479 名前:デフォルトの名無しさん mailto:sage [2012/01/20(金) 17:36:37.31 ]
てことは
はどこに掛かってるんですか

480 名前:デフォルトの名無しさん mailto:sage [2012/01/20(金) 17:50:36.19 ]
いいえ



481 名前:デフォルトの名無しさん mailto:sage [2012/01/20(金) 17:54:12.44 ]
言い得て事は

482 名前:デフォルトの名無しさん mailto:sage [2012/01/20(金) 18:00:41.14 ]
>>476
16bitは動かないから、32bitまたは64bitじゃないかな

483 名前:デフォルトの名無しさん mailto:sage [2012/01/20(金) 18:04:16.54 ]
なんでポインタのサイズなんて気にするの?
実質ただの整数なんだから32でも64でも大差ないでしょ

484 名前:デフォルトの名無しさん mailto:sage [2012/01/20(金) 18:10:11.41 ]
>>476
VCならばこのあたりに注意すれば十分かと
ttp://msdn.microsoft.com/ja-jp/library/3b2e7499.aspx

485 名前:デフォルトの名無しさん mailto:sage [2012/01/20(金) 18:18:18.31 ]
わかんなかったら全部64bit整数でショリすれば問題ない

486 名前:デフォルトの名無しさん mailto:sage [2012/01/20(金) 18:21:09.88 ]
そんなコード書いてて128bit時代が来たらどうするの?

487 名前:デフォルトの名無しさん mailto:sage [2012/01/20(金) 18:25:58.21 ]
全部128bit整数にすれば問題ないよ?
typedef一発だよ

488 名前:デフォルトの名無しさん mailto:sage [2012/01/20(金) 18:29:13.02 ]
typedef int32_t oreint_t;
typedef int64_t oreint_t;
typedef int128_t oreint_t;
void oreint_chk(void) {
if (sizeof(oreint_t) != sizeof(void *))
abort(); // 無理です
}
何も問題ない

489 名前:デフォルトの名無しさん mailto:sage [2012/01/20(金) 18:32:58.92 ]
DWORDとDWORD_PTRの大きさ違うとか
いちいち問題にする事自体が時間の無駄

490 名前:デフォルトの名無しさん mailto:sage [2012/01/20(金) 22:08:26.58 ]
たぶん、そんなあなたに:intptr_t



491 名前:デフォルトの名無しさん mailto:sage [2012/01/21(土) 02:09:08.83 ]
それで思い出したけど、_t の t って何の略?
size_tのおかげで、しれっと使ってるけど、良く考えたら何の略か知らなかったので、
この際教えて欲ください。


492 名前:デフォルトの名無しさん mailto:sage [2012/01/21(土) 02:16:15.68 ]
何かの略というより、お墓ね

493 名前:デフォルトの名無しさん mailto:sage [2012/01/21(土) 02:51:54.94 ]
typedef

494 名前:デフォルトの名無しさん mailto:sage [2012/01/21(土) 02:54:28.66 ]
type

495 名前:デフォルトの名無しさん mailto:sage [2012/01/21(土) 09:39:30.24 ]
size_tとかSizeTypeみたいな後ろにくっついてる型を意味するサフィックスは
大抵の場合変数名とかぶるのが気持ち悪いというだけの理由で付けられたものだよ

496 名前:デフォルトの名無しさん mailto:sage [2012/01/21(土) 23:18:35.97 ]
>>495
ソース

// C/C++の薀蓄もきちんと知りたい年頃。
// 納得はしている。

497 名前:デフォルトの名無しさん mailto:sage [2012/01/22(日) 16:44:34.75 ]
ひょっとして仮想関数を利用したポリモーフィックなクラス階層構造以外で継承することってあまり無いんですか?
今まで継承していたクラスをメンバに持たせて関数を呼び出すだけのinlineメンバ関数を定義するするほうが複雑なコードを組みやすい気がするんですけど

498 名前:デフォルトの名無しさん mailto:sage [2012/01/22(日) 16:51:24.82 ]
ひょっとしてはどこに掛かってるんですか

499 名前:デフォルトの名無しさん mailto:sage [2012/01/23(月) 11:59:33.25 ]
なんでC++はポインタと参照を違うインターフェースで扱うんですか?
Javaみたいに全部.でやったほうがクールだと思います

500 名前:デフォルトの名無しさん mailto:sage [2012/01/23(月) 14:34:16.26 ]
Javaを意識したら、Oracleがアップをはじめるからだめです(w


Javaを意識して、極力参照で書くようにポリシを決めることはできる
君が自由人(個人開発者)なら、まったく君の自由だ

C/C++には、壊れてたり、nullだったりするポインタ型の値を扱う「資格」があるんだよ
C系のみとは言わないが、そこには誇りすらある

# 休憩しにきた



501 名前:デフォルトの名無しさん mailto:sage [2012/01/24(火) 11:35:16.68 ]
C#でおk

502 名前:デフォルトの名無しさん mailto:sage [2012/01/25(水) 20:19:38.03 ]
“Javaには無い”演算子オペレーターを効率よく実装するためだったような
もう忘れた


503 名前:デフォルトの名無しさん mailto:sage [2012/01/25(水) 20:54:01.80 ]
Handle-Bodyを使えば見た目が参照っぽいスマートポインタになってJava厨も安心する

504 名前:デフォルトの名無しさん mailto:sage [2012/01/25(水) 21:53:31.45 ]
enum をインクリメントして巡回したいんだけど安全で汎用的な方法はある?
enumの型ごとに値の遷移テーブル(それかswitchで次を見つけるだけの関数)を作るみたいな、地道な作業するしかないかな?

505 名前:デフォルトの名無しさん mailto:sage [2012/01/25(水) 22:18:47.13 ]
汎用的かどうかなんてその時個々人の主観が伴うから
好きにしたらいいよ

506 名前:デフォルトの名無しさん mailto:sage [2012/01/25(水) 22:55:00.76 ]
enumがアップル=1、オレンチ=3、ピーチ=7だったら

num[]={1,3,7}; とsize=3を別に持っとけ。

このデータを前処理で自動生成してもよい。

507 名前:デフォルトの名無しさん mailto:sage [2012/01/25(水) 23:15:40.86 ]
地道な作業を、PCにやらせるようにするのが古典的だが手っ取り早い

508 名前:デフォルトの名無しさん mailto:sage [2012/01/25(水) 23:17:53.77 ]
そうだな生成プログラムでも書いた方がらしいな

509 名前:デフォルトの名無しさん mailto:sage [2012/01/26(木) 18:00:43.29 ]
Visual Studio2003です。
.cファイルを右クリックしてコンパイルすると.objファイルができるじゃないですか。
このできた.objファイルを他のプロジェクトで使いたいんですよ、javaの.classファイルみたいなイメージで。
でもソリューションエクスプローラには「ソースファイル」「ヘッダーファイル」「リソースファイル」とあるんですが、どこに置いてどうincludeすれば使えるようになるんですか?

510 名前:デフォルトの名無しさん mailto:sage [2012/01/26(木) 18:21:54.58 ]
・.objはリンカが扱う。
・ただし、リンカコメントというのをソースに埋め込むと、.cで.objを引っ張り込むことを記述できる。



511 名前:デフォルトの名無しさん mailto:sage [2012/01/26(木) 19:57:25.12 ]
>>510
リンカコメントですね、ググってみます。
ありがとうございます。

512 名前:デフォルトの名無しさん mailto:sage [2012/01/26(木) 20:22:45.05 ]
うん、ぐぐったらなんかわかるだろ。
と思ってたら、通称だったかも。うまく出せない。

> #pragma comment(linker, "...")

こういうのなので、ぐぐってみそ。

で、そんなことをするうちに、include 的に記述するより、
プロジェクト設定みたいので指定するのが自然ってのがわかると思う

513 名前:デフォルトの名無しさん mailto:sage [2012/01/26(木) 20:49:19.22 ]
Makefileに変換してnmake使うことできないの?
後々そっちの方がいいよ

514 名前:デフォルトの名無しさん mailto:sage [2012/01/27(金) 09:03:21.79 ]
>>512
ありがとうございます。色々試してみます。
>>513
nmakeって元から入ってるのならいけると思います。
自分のバソコンじゃないのでインストールとかはできないです。

515 名前:デフォルトの名無しさん mailto:sage [2012/01/28(土) 14:49:21.25 ]
ナマポとスマポどっちもぶち込めるコンテナってどう書くんですか?

516 名前:デフォルトの名無しさん mailto:sage [2012/01/28(土) 23:43:59.13 ]
スマポのナマポをぶちこんどけばおk

517 名前:デフォルトの名無しさん mailto:sage [2012/01/29(日) 07:35:41.50 ]
WindowsのC/C++のUNICODE両対応アプリのソースって、
文字定数と文字列定数はいちいち_T()で囲わないとダメですか?
一部をANSIで扱うことってありえますか?

518 名前:デフォルトの名無しさん mailto:sage [2012/01/29(日) 08:09:51.62 ]
今の流行はAPIに食わせる場合は_T()
食わせない場合はUTF-8として扱う
かな

519 名前:デフォルトの名無しさん mailto:sage [2012/01/29(日) 22:37:04.75 ]
WindowsはAPIにAやWがついてるやつを使えば
_T使わなくても平気じゃないかな

520 名前:デフォルトの名無しさん mailto:sage [2012/01/29(日) 22:53:52.30 ]
CString使えばいいよ



521 名前:デフォルトの名無しさん mailto:sage [2012/01/29(日) 22:56:40.08 ]
時刻を管理するクラスTimeのメンバ関数として、
分を返す
int Time::min( ) const
を用意したのですが、
VC++ 2010だと、windows.hをインクルードした際に
マクロmin(a,b)(((a)<(b))?(a):(b)) と解釈されてしまい
引数が足りないというコンパイルエラーになります。
このコンパイルエラーを回避するためには
min()の名前を変更する以外に方法は無いのでしょうか?

よろしくお願い致します。

522 名前:デフォルトの名無しさん mailto:sage [2012/01/29(日) 23:22:39.49 ]
#define NOMINMAX か (t.min)();

523 名前:デフォルトの名無しさん mailto:sage [2012/01/29(日) 23:23:52.48 ]
>>521
includeした後にundefする。でも衝突しそうな名前は初めから避けるべき

524 名前:デフォルトの名無しさん mailto:sage [2012/01/30(月) 00:39:48.02 ]
ファイル名やフォルダ関係はUNICODEで統一しといた方がいいかも
ファイルの中身は知らん

525 名前:521 mailto:sage [2012/01/30(月) 09:55:06.10 ]
>>522
>>523
ありがとうございます。

526 名前:デフォルトの名無しさん mailto:sage [2012/01/30(月) 10:10:56.90 ]
stdと衝突するあたりM$の頭の悪さが露呈してるよなぁ

527 名前:デフォルトの名無しさん mailto:sage [2012/01/30(月) 14:50:02.33 ]
maxマクロを書いたMSのプログラマは絶対に許さない。絶対にだ

528 名前:デフォルトの名無しさん mailto:sage [2012/01/30(月) 22:38:39.10 ]
>>526
windows.hって相当昔からあるから、STLが規格に入る以前に作られてたとか

529 名前:デフォルトの名無しさん mailto:sage [2012/02/03(金) 00:18:22.76 ]
C++の大規模ソースをソーストレースするときのおすすめツールを教えてください。
ある関数の宣言もとや使用箇所を手早く探せるようにしたいです。


以下、今まで使ってたもの。

 ctags     :同じ名前の関数(オーバーライドされてる関数)があるとき、
          候補をリスト表示できない。
          関数やメンバを使用している箇所を表示できない。

 GNU Global :構造体のメンバを検索したり、
          関数定義もとを探すときに見つからないことがある。


Windows 、Linux のどちらかで使えれば良いです。

530 名前:デフォルトの名無しさん mailto:sage [2012/02/03(金) 00:31:09.18 ]
grepや全文検索。
コンパイラ提供のインクルードパスをgrepかけることあるがそれほど時間掛からん。



531 名前:デフォルトの名無しさん mailto:sage [2012/02/03(金) 10:17:31.94 ]
ビルド環境さえ用意できるならなにもなくてもなんとかなるね
grep,ファイラー,テキストエディタはさすがに用意できるだろうし

532 名前:デフォルトの名無しさん mailto:sage [2012/02/03(金) 13:40:47.76 ]
ソースを全文検索対象にして、indexつくらせちゃう
まったくのベタだが、結局これがいちばん早かった

533 名前:デフォルトの名無しさん mailto:sage [2012/02/05(日) 15:08:59.03 ]
class c_A、class c_Bがあって、


〜〜ヘッダファイル内〜〜
#include "c_B.h"

class c_A
{
c_B hoge;

};
〜〜〜〜〜〜〜〜〜〜〜
でインスタンス生成できちゃうんですか

534 名前:デフォルトの名無しさん mailto:sage [2012/02/05(日) 15:46:32.64 ]
>>529
つ[Doxygen]

>>533
できない。


535 名前:デフォルトの名無しさん mailto:sage [2012/02/05(日) 18:41:28.49 ]
C++の規格上vector.end()をインクリメントすると何が帰ってくるか未定義?
だとすると内部で+=や++オペレータを呼ぶだけのadvanceは終わりをチェックしてくれていないの?

536 名前:デフォルトの名無しさん mailto:sage [2012/02/05(日) 18:43:48.01 ]
はい

537 名前:533 mailto:sage [2012/02/05(日) 19:56:00.52 ]
すいません、c_Aのインスタンスを生成したときに、内部に持っているc_Bの
インスタンスも生成されるのでしょうか?
という質問でした

538 名前:デフォルトの名無しさん mailto:sage [2012/02/05(日) 19:59:31.87 ]
はい

539 名前:デフォルトの名無しさん mailto:sage [2012/02/05(日) 20:44:34.41 ]
それで納得したならそれでいいし、
それで何か困るなら、ラッパクラスを作ってもいい

540 名前:デフォルトの名無しさん mailto:sage [2012/02/05(日) 21:03:30.46 ]
>>536
ohそうなのか。ありがとう
規格上どのコンテナのイテレータでもそうなってる訳?



541 名前:デフォルトの名無しさん mailto:sage [2012/02/05(日) 21:05:46.99 ]
はい

542 名前:デフォルトの名無しさん mailto:sage [2012/02/05(日) 23:09:47.26 ]
ほんとにちょっとした質問なんですけど、

ifstream ifs("csvファイル.csv");
string line;
getline(ifs,line);
//※ここで、別のファイルを開きたくなったので、
ifs.open("別のファイル.csv");
ってやった場合、マズかったりしますか?
それとも、ifsは「別のファイル.csv」をちゃんと頭から読み込んでくれますでしょうか?

543 名前:デフォルトの名無しさん mailto:sage [2012/02/05(日) 23:16:38.66 ]
はい

544 名前:デフォルトの名無しさん mailto:sage [2012/02/05(日) 23:19:07.66 ]
マズかったりします

545 名前:デフォルトの名無しさん mailto:sage [2012/02/06(月) 01:10:08.63 ]
>>541
thx!
だとイテレータ使ったループって使いにくくない?
Cだとfor(i=0;i<10;i+=2);で偶数飛ばせるけどイテレータはいつもend()になったかどうか
チェックしないといけない。ぶっちゃけ改悪なのでは?

546 名前:デフォルトの名無しさん mailto:sage [2012/02/06(月) 01:35:42.46 ]
listなどの実装を考えると一般的にイテレーターがi<Nと書けない(非常にコストが掛かる)ことに気がつく

547 名前:デフォルトの名無しさん mailto:sage [2012/02/06(月) 07:56:49.62 ]
コンティナーのせっかく抽象化したい照れーたをインクリメイツ
って発想が
キモイと思うのだが
片リストを逆から辿ろうとしたら
「このコードはバヤイ!リバースコピーをいテレータ用に確保なう!」
「もっといい方法があるのにp」
と忠告してくれるコンパイラーがあるといい

548 名前:デフォルトの名無しさん mailto:sage [2012/02/06(月) 08:07:20.64 ]
>>546
大概の実装はlistのsizeは定数時間になっていると思うが

549 名前:デフォルトの名無しさん mailto:sage [2012/02/06(月) 11:33:49.80 ]
>>548
それとこれとは関係ない。

550 名前:デフォルトの名無しさん mailto:sage [2012/02/07(火) 16:30:45.59 ]
while(true){
int a = 1;
cout << a << endl;
a = 2;
}

whileブロック内で変数を定義したらどんなもんかとこれを試してみたら
無限に1が出力されました。初期化って一度だけかな?と思ったけど
この結果ということは、これは一回のループごとに毎回変数が定義されてる
ということですか?auto変数の確保→破棄を延々と繰り返すみたいな。
だとするとwhileブロックの外で定義した場合に比べて効率が悪いのですか?



551 名前:デフォルトの名無しさん mailto:sage [2012/02/07(火) 16:33:50.32 ]
>>550
気にするほどの差はないだろ。最適化される。
使うときに明示的に定義した方が速いこともある。
長期間使用され続ける物は、CPUキャッシュに入りにくくなる可能性がある。

552 名前:デフォルトの名無しさん mailto:sage [2012/02/07(火) 16:39:03.86 ]
レスどうもです。
たいした差はないということですが、プログラミング作法としても
whileブロック内での変数定義ってあたりまえのように使われるの
でしょうか(初期化のあるなしに関わらず)。

553 名前:デフォルトの名無しさん mailto:sage [2012/02/07(火) 16:45:50.33 ]
あたりまえのように使われる

554 名前:デフォルトの名無しさん mailto:sage [2012/02/07(火) 16:46:57.81 ]
そうですか、ありがとうございました。

555 名前:デフォルトの名無しさん mailto:sage [2012/02/07(火) 19:00:20.48 ]
while(true)
{
 std::vector<int> tmp(1000);
}
とかなら考え直したほうがいいな

556 名前:デフォルトの名無しさん mailto:sage [2012/02/07(火) 19:06:36.55 ]
while(true) {
static std::vector<int> tmp(1000);
}

つまりこういうことですね?

557 名前:デフォルトの名無しさん mailto:sage [2012/02/07(火) 23:25:52.31 ]
変数の生存が長く使われないほど
CPUキャッシュ ⇒ メモリ ⇒ HDD と配置が格下げされる。
HDDまでいったら値を読み込むのに時間食う。
新規に生成したほうが得。
メモリにあったとしてもそれを読み込むよりL1キャッシュに新規に生成した方が速いだろう。

558 名前:デフォルトの名無しさん mailto:sage [2012/02/08(水) 01:45:33.96 ]
>>557
キャッシュミスより生成コストのが普通に高いと思うけど、
そんな事ありえるの?

559 名前:デフォルトの名無しさん mailto:sage [2012/02/08(水) 03:11:26.31 ]
プリフェッチも考慮するとキャッシュミス自体それほど起こるかどうか

560 名前:デフォルトの名無しさん mailto:sage [2012/02/08(水) 08:25:58.69 ]
そもそも、ローカル変数なら同じコードに落ちる可能性が高い。
つまり、関数突入時にスタックポインタを移動するだけ。



561 名前:デフォルトの名無しさん mailto:sage [2012/02/08(水) 08:58:10.22 ]
そういうくだらない最適化は最後の最後にしろ

562 名前:デフォルトの名無しさん mailto:sage [2012/02/12(日) 18:45:29.51 ]
クラスメンバ関数の宣言と定義を分けるときにinline化したい場合は
宣言か定義のどちらかにinlineが入っていればOKですか?
それとも両方書かないとだめですか?


563 名前:デフォルトの名無しさん mailto:sage [2012/02/12(日) 22:11:37.43 ]
int a[4];
があったとして、
もしa[0],a[1],a[2],a[3]全てが0だったら、という条件式は
if(a[0]=0 && a[1]=0 &&a[2]=0 &&a[3]=0)
以外に表せますか?
なんかもっとスマートに書けたりできますか?

564 名前:デフォルトの名無しさん mailto:sage [2012/02/12(日) 22:22:55.93 ]
if(a[0]|a[1]|a[2]|a[3])
スマートかどうかは知らん

565 名前:デフォルトの名無しさん mailto:sage [2012/02/12(日) 22:25:24.66 ]
そもそもそれ代入やん

566 名前:デフォルトの名無しさん mailto:sage [2012/02/12(日) 22:27:17.51 ]
ひっかけ乙だったのかw > 565

567 名前:デフォルトの名無しさん mailto:sage [2012/02/12(日) 22:37:50.98 ]
if(a[0]=a[1]=a[2]=a[3]==0)
とかだめだったっけ

568 名前:デフォルトの名無しさん mailto:sage [2012/02/12(日) 22:52:52.39 ]
中身ぶっこわしてもいいのならアリ・・・か?

569 名前:デフォルトの名無しさん mailto:sage [2012/02/12(日) 23:27:14.24 ]
>>563
int i;
for(i=0; i<4; i++) if(a[i] != 0) break;
if(i == 4) {
    //全て0のときの処理
}

570 名前:デフォルトの名無しさん mailto:sage [2012/02/13(月) 00:26:09.73 ]
intが32bitで128bitレジスタがあったら
if (*(int128*)a != 0)



571 名前:デフォルトの名無しさん mailto:sage [2012/02/13(月) 08:16:17.69 ]
if( a[0]*a[0] + a[1]*a[1] + a[2]*a[2] + a[3]*a[3] == 0 )

572 名前:デフォルトの名無しさん mailto:sage [2012/02/13(月) 08:23:37.82 ]
if(a[0] || a[1] || a[2] || a[3]) {
; /* なにもしない */
} else {

}

573 名前:デフォルトの名無しさん mailto:sage [2012/02/13(月) 12:38:17.22 ]
>>562
宣言にinlineは、書いても書かなくてもinlineじゃないか?

定義はinlineにしたいならヘッダに書くべきだし、
ヘッダに書くとして複数includeする場合は、
inlineを書かないといけない。

1ファイルでしか使わない場合はシラネ

574 名前:デフォルトの名無しさん mailto:sage [2012/02/13(月) 14:12:45.40 ]
テンプレート関数xxxにfuncを渡すときには自動的にTとUが設定されるのに
テンプレートクラスyyyにfuncを渡すときには、自分でTとUを指定しなければなりません。
この違いはなんなのでしょうか?
環境は gcc version 4.6.1 です。


template<class T, class U>
void xxx( T (*func)(U) )
{ }


template<class T, class U>
class yyy
{
 private:
  T (*f_)(U);
 public:
  yyy( T (*f)(U) ): f_(f){ }
};


double func( int v ){ return (double)v*0.1; }

int main( )
{
 xxx( func );
 //yyy obj( &func ); //templateの型を指定しないとコンパイルエラー
 yyy<double,int> obj;

return 0;
}


575 名前:デフォルトの名無しさん mailto:sage [2012/02/13(月) 18:30:09.86 ]
>>574
関数は型推論してくれるが、クラスはしてくれない決まりだから

576 名前:574 mailto:sage [2012/02/13(月) 22:46:09.01 ]
>>575
ありがとうございます。

std::mem_fun_refとその内部で呼んでいるstd::mem_fun_ref_t
との関係がイマイチわからなかったので色々試していたところでした。
テンプレート関数のstd::mem_fun_refで型推論して、
テンプレートクラスのstd::mem_fun_ref_tに伝えているのですね。

577 名前:デフォルトの名無しさん mailto:sage [2012/02/15(水) 12:40:26.78 ]
こういう命名ってC++では合法ですか?

namespace _hoge {
struct _fuga {
void _func(void);
};
}

578 名前:デフォルトの名無しさん mailto:sage [2012/02/15(水) 13:02:26.24 ]
>>577
×namespace _hoge {
○struct _fuga {
○void _func(void);
先頭にアンダースコアはオススメしない

579 名前:デフォルトの名無しさん mailto:sage [2012/02/15(水) 19:47:17.24 ]
これってどういう意味でだめなんだっけ?
> ×namespace _hoge {

ネームスペース名って先頭アンダースコアだめなんだっけ?


580 名前:デフォルトの名無しさん mailto:sage [2012/02/15(水) 20:04:49.94 ]
>>579
グローバルスコープが禁止



581 名前:デフォルトの名無しさん mailto:sage [2012/02/15(水) 20:43:27.29 ]
どうもです。
じゃあ入れ子になってれば可能なんですな。

582 名前:デフォルトの名無しさん mailto:sage [2012/02/21(火) 12:57:48.48 ]
文字列の配列を10個用意して最初の文字列にstrcpyでデータをコピーしたいのですがエラーになってしまいます

char* p[10];
p[0] = "Spring";
strcpy(p[0],"Summer");

一体どこをどう直せばよいのでしょうか?

583 名前:デフォルトの名無しさん mailto:sage [2012/02/21(火) 13:03:26.26 ]
std::string p[10];

p[0] = "Spring";
p[0] = "Summer";

584 名前:582 mailto:sage [2012/02/21(火) 13:45:23.18 ]
ありがとうございます、string型でやってみます。
ちなみにstrcpyを使うのは間違いなのでしょうか?
何が間違いなのかよく分からないのです



585 名前:デフォルトの名無しさん mailto:sage [2012/02/21(火) 13:51:30.39 ]
メモリについてもう少し勉強しなさい

586 名前:582 mailto:sage [2012/02/21(火) 13:55:37.67 ]
分かりました、もう少し勉強します

587 名前:デフォルトの名無しさん mailto:sage [2012/02/21(火) 15:28:01.01 ]
浮動小数の比較で

a=1.0;
b=1.0;
if ( a <= b )

みたいにするのは、やめたほうがいいですか?
a=1.0 とすると実際は a=1.00000000001 みたいになってて <= の評価が
うまくいかない可能性を危惧しています。とりあえず今のところ問題なさそうなんですが。
Fortranやってたときは、よくこんなふうにやってました。

eps=1e-30;
a=1.0-eps;
b=1.0;
if ( a <= b )

588 名前:デフォルトの名無しさん mailto:sage [2012/02/21(火) 15:30:17.33 ]
場合による

589 名前:デフォルトの名無しさん mailto:sage [2012/02/21(火) 15:45:14.64 ]
問題出るまでそのまま使っとけ。
問題あったら任意精度や整数計算へおきかえればいい。
精度が64、128ビットと固定されていればどれだけビット数上げても誤差が出る。
その初めに引いとくのは駄目だろ。もしaが負の方向へ小さかったら間違える。

590 名前:デフォルトの名無しさん mailto:sage [2012/02/21(火) 23:19:04.96 ]
一致じゃなくて大小関係なんだろ?
単に if( b > a) でいいのでは…
一致が必要なときは、確かに、EPSILON系の定数を使うけど。




591 名前:デフォルトの名無しさん mailto:sage [2012/02/21(火) 23:29:00.68 ]
厳密には大小でもダメだよ
計算機上の値では0 < xが真になる場合でも真値では0 < xが成立しない事は普通にある

592 名前:デフォルトの名無しさん mailto:sage [2012/02/25(土) 17:10:03.20 ]
vector<bool>に限らず特殊化されたテンプレートクラスを
特殊化しないで使いたい場合はどうすればいいんですか?

593 名前:デフォルトの名無しさん mailto:sage [2012/02/25(土) 17:36:17.81 ]
そんなことはできない

594 名前:デフォルトの名無しさん mailto:sage [2012/02/26(日) 03:37:46.38 ]
具体的に何がしたいんだろう、ちょっと読めない

595 名前:デフォルトの名無しさん mailto:sage [2012/02/26(日) 05:19:34.45 ]
hoge<bool> という特殊化されたオリジナルのテンプレートがあって、
それを、hoge<int>でも使いたいとか、そういうことかな?

他はまったく思いつかない。


596 名前:デフォルトの名無しさん mailto:sage [2012/02/26(日) 07:25:45.13 ]
何でそうしたいか理由が全く分からん。やるならメンバにboolだけ持たせた構造体を定義してそれを渡すとか?

597 名前:デフォルトの名無しさん mailto:sage [2012/02/26(日) 13:27:55.80 ]
最適化などのために特殊化されてるけど
他のコードと互換性がなくて仕方なく非特殊化バージョンを使いたいなーということはあるでしょ
bool参照しか受け取らない関数にvector<bool>の要素渡せないとか


598 名前:デフォルトの名無しさん mailto:sage [2012/02/26(日) 16:53:20.32 ]
質問させていただきます。PGを書く問題ではないのですが、
「ソートプログラムとデータ構造について
具体的なソートプログラムの名前をあげ、
とのようなデータ構造(配列、単方向リスト、双方向リスト、循環リストなど)が
なぜ適しているか述べろ。

が分かりません!教えてください

599 名前:デフォルトの名無しさん mailto:sage [2012/02/26(日) 17:39:01.94 ]
丸投げは宿題スレ行け

600 名前:デフォルトの名無しさん mailto:sage [2012/02/27(月) 00:31:23.68 ]
これは簡単なようでいて、こういうのに強くないと解けない 宿題スレが適当



601 名前:デフォルトの名無しさん mailto:sage [2012/02/27(月) 10:11:12.67 ]
宿題スレでも扱いが酷いな。テンプレ無視だからしょうがないけど

まずソートの種類を調べるくらいは自分で出来るんじゃない?
それからそのソートに適したデータ構造と理由を聞けば…

ところで循環リストが適してるソートなんてあったっけ?

602 名前:デフォルトの名無しさん mailto:sage [2012/02/27(月) 11:07:15.84 ]
循環ソート

603 名前:デフォルトの名無しさん mailto:sage [2012/03/16(金) 00:20:56.14 ]
c++ってchar使うの?
文字列はstringを必ず使うべきなの?

604 名前:デフォルトの名無しさん mailto:sage [2012/03/16(金) 00:33:04.28 ]
stringはcharがもとになっている。資源の無駄を減らすならchar

605 名前:デフォルトの名無しさん mailto:sage [2012/03/16(金) 07:49:56.89 ]
純粋に高級言語として使うなら「1文字の文字」を扱うときぐらいだが
C++には高級アセンブラたるC言語の後継としての役割もあるから無いと困る
組み込み系はもちろんだし、そうでなくてもAPIとかはchar[]ベースだったりする

606 名前:デフォルトの名無しさん mailto:sage [2012/03/17(土) 12:18:11.06 ]
charを要求するライブラリを呼ぶ限り、charは不滅
もちろん、charを極力廃すような書き方をすることは可能だろう

607 名前:デフォルトの名無しさん mailto:sage [2012/03/18(日) 20:24:47.88 ]
C++のステートパターンの骨組みというか
サンプルプログラムを教えてください。

608 名前:デフォルトの名無しさん mailto:sage [2012/03/18(日) 23:02:30.36 ]
>>607
https://www.google.co.jp/

609 名前:デフォルトの名無しさん mailto:sage [2012/03/19(月) 00:00:49.96 ]
struct A{
  int a;
  struct B{
    static int& a;
  };
  int f(){
    a = 10;
    B::a = a;
  }
};
int main(void){
  A a;
  a.f();
}
で,
undefined reference to `A::B::a'
とエラーが出ます.
どうやって回避すればいいのでしょうか.

610 名前:デフォルトの名無しさん mailto:sage [2012/03/19(月) 00:08:44.64 ]
>>609
そもそも、なんで構造体の中から外を知ることができると思い込んだの?



611 名前:デフォルトの名無しさん mailto:sage [2012/03/19(月) 00:27:02.08 ]
>>610
確かに言われて見れば・・・
とりあえず構造体のネストを消すように作り直してみます.

612 名前:デフォルトの名無しさん mailto:sage [2012/03/19(月) 01:24:49.10 ]
>>609
参照は定義時に初期化しなければならない。まあやりたかったこととは違うだろうが。

struct A {
 int a;
 struct B {
  static int& a;
 };
 int f(){
  a = 10;
  B::a = a;
  return 0;
 }
};

A x;
int & A::B::a = x.a;

int main(void){
 A a;
 a.f();
}

613 名前:デフォルトの名無しさん mailto:sage [2012/03/19(月) 21:24:25.17 ]
C++のステートパターンの骨組みというか
サンプルプログラムを教えてください。

614 名前:デフォルトの名無しさん mailto:sage [2012/03/19(月) 21:26:51.56 ]
>>613
>>608

615 名前:デフォルトの名無しさん mailto:sage [2012/03/19(月) 22:15:48.44 ]
>>613
ttp://codepad.org/zJKMXKy9
概念を理解できてれば多言語のソースでもなんとなく読めるはずだがな

616 名前:デフォルトの名無しさん mailto:sage [2012/03/19(月) 22:48:35.81 ]
>>615
本質的なところじゃないけど、deleteしようぜ

617 名前:デフォルトの名無しさん mailto:sage [2012/03/24(土) 13:51:17.47 ]
構造体内部に関数って入れられるんだっけ?

618 名前:デフォルトの名無しさん mailto:sage [2012/03/24(土) 14:14:55.96 ]
C++だからstructで定義するものもクラス

619 名前:デフォルトの名無しさん mailto:sage [2012/03/26(月) 20:12:58.72 ]
C++だとunionもクラスなの?

620 名前:デフォルトの名無しさん mailto:sage [2012/03/26(月) 20:42:27.78 ]
ポリモルフィズムの概念がない



621 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/03/31(土) 15:29:17.65 ]
ポインターについて質問です。

*p++

>この文では最初にp をインクリメントし、次に新しいメモリアドレスにある
>値を得ます。

と、いう説明がありますが、"次に新しいメモリアドレスにある値" の意味が
わかりません。 仮にp に格納されているアドレスが100番地 だったとすると、
それが+1(char の場合) されて101 となるだけではないのでしょうか。

622 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/03/31(土) 15:54:39.35 ]
>>621
いいえ違います

623 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/03/31(土) 17:00:17.86 ]
>"次に新しいメモリアドレスにある値"
その例では、101にある値。

624 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/03/31(土) 17:02:07.88 ]
>>622
ではどういう動作をするのでしょうか。詳しくお願いします。

625 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/03/31(土) 17:13:32.58 ]
>>623
なんとなくわかりましたが、101番地にある値が"得られる" というのが
いまいちしっくり来ません。 ひょっとしてこれは、ポインターが+1 されて、
それ以降、そのポインターを使ったときは、101 番地のデータが読める、
という意味で"得られる" と書かれたものだと解釈してよいでしょうか。

626 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/03/31(土) 17:30:40.63 ]
>>625
演算子の優先順位が
 後置インクリメント(++) >> 前置インクリメント(++) >> 間接参照(*) >> 乗算(*)

この場合は
 *p++ = *(p++)

メモリ内容が以下だとすると
ADDRESS VALUE
0x00401000 0x0123
0x00401004 0x0456
0x00401008 0x0789
0x0040100C 0x0ABC

DWORD* p
p = 0x00401004   *p は 0x0456
p++
p = 0x00401008   *p は 0x0789

627 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/03/31(土) 17:33:49.60 ]
あ、最後のp = 0x00401008
の "=" は代入じゃなくて p が指す物を示す

628 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/03/31(土) 19:02:19.38 ]
>>626
具体的な例を挙げてくださり、ありがとうございます。
演算子の優先順位を忘れていました。カッコをつけるとわかりやすいですね。

ただ、残念ながらおっしゃっている事がまだ理解できません。
*p++ ・・・この文が、何かの変数や関数への代入文に使われているのなら、
「ポインターを+1 されたアドレスのデータを何かに代入しているんだな」 と
思えるのですが、参照している教科書には *p++ とだけしか書かれておらず、
何かに代入しているわけではないのです。
だったら * は不要で、 p++ だけでいいのでは? と思います。

ど素人の低レベルな質問で意味不明かもしれませんが、なにかヒントを下さい。

629 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/03/31(土) 19:07:33.60 ]
>>628
前後のコードもしくは文章plz

630 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/03/31(土) 19:21:45.24 ]
>>629
独習C から、該当部分を引用します。

>ポインタそのものに対してだけでなく、ポインタが指しているオブジェクトに
>対してもインクリメント演算子やデクリメント演算子を使用する事ができます。
>しかし、ポインタが指しているオブジェクトをインクリメントしようとするときには
>注意してください。 例えば、値1 の整数を指しているp があるとします。
>次の文を実行するとどうなるでしょうか。
>
> *p++
>
>予想は当たったでしょうか。この文では最初にp をインクリメントし、次に
>新しいメモリアドレスにある値を得ます。ポインタが指しているものを
>インクリメントするためには、次のような式を使わなければなりません。
>
> (*p)++
>
>かっこをこのように使うことによってp が指している値をインクリメントすることが
>できます。
>また、関係演算子を用いれば、2つのポインタの値を比較する事ができます。
>もちろん、ポインタの比較は、それが相互に関連している、つまり、同じ型の
>オブジェクトを指しているような場合に、初めて意味を持ちます。

以上該当部分です。何か重要な情報がありますでしょうか。



631 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/03/31(土) 19:35:48.07 ]
>>630
書いてるまんまだろ

参照先をインクリメントしたいときは (*p)++ と書け
*p++ と書いたらポインタ自体をインクリメントすることになる
って言ってるだけ

*p++ のコード自体に筆者の言いたい意味があるわけじゃない

632 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/03/31(土) 21:05:42.47 ]
>>631
>*p++ のコード自体に筆者の言いたい意味があるわけじゃない

なるほど。ここまで読み進めてきて、はしょった表現がなかったものですから、
勘違いしていたようです。 どうもありがとうございました。

633 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/03/31(土) 21:10:08.38 ]
*p++ って、もはや定型的な書き方なのさ。

634 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/03/31(土) 22:44:18.36 ]
>>630
>> *p++
>>
>>予想は当たったでしょうか。この文では最初にp をインクリメントし、次に
>>新しいメモリアドレスにある値を得ます。

「インクリメント前のメモリアドレスにある値を得た後、pをインクリメントする。」だろ?

635 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/01(日) 18:34:04.05 ]
なんだか勘違いしそうな説明が続いてるなw

例えば、
int a[4] = { 0,1,2,3 };
int* p = a;

int n = *p++;
int m = *(p++);

ってすると、n = 0, m = 1 になるんだぜ。
上の説明だけでは納得できないだろ?w



636 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/01(日) 19:22:47.06 ]
>>635
いや、大体わかったつもりです。

int n = *p++
// 配列a の先頭番地のデータ(0) をn に代入し、その後インクリメントされる。

int m = *(p++)
// p は+2 されているので、データ(1) がm に代入され、その後インクリメント。

これらの文が処理された後、p はデータ(2) の番地を指している。

・・こういう解釈であっていますよね。

637 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/01(日) 19:32:19.53 ]
>>636
nもmも式評価のときは*pで++は*よりも優先順位が高いから
結合するのはどちらもpだけってことだろ?

638 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/01(日) 19:42:30.17 ]
>637
すいません、本当に素人で、釣りをしているわけではありません。
直球ど真ん中のマジレスでお願いします。
そこであえて質問ですが、"結合" とは、この場合どういう意味でしょうか。

639 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/01(日) 19:44:20.68 ]
疑問に思ったところは6章のポインタで
>>636のいいたいインクリメントについては2章制御文その1でやってるから大丈夫だろ
ってかインデックス見ようと翔泳社見たら独習C絶版なのな
独習C++ってC読んでること前提で書かれてなかったっけ?

640 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/01(日) 19:57:11.02 ]
>>638
その演算子がある項に作用すること

後置インクリメント++の場合、単項演算子で結合性は右から左
また優先順位は参照演算子*よりも高いので
この場合(*p++)は++の左にある単項、pに作用する
後置インクリメントは評価後にインクリメントされるので
この式(*p++)自体の結果は*p

これでいい?



641 名前:営利利用に関するLR審議中@詳細は自治スレへ [2012/04/01(日) 20:49:01.75 ]
>>640
160km/h のストライク。よくわかりました。今後ともよろしくお願いします。

642 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/01(日) 20:54:47.31 ]
>>639
いや、絶版じゃないだろう・・・・・第3版のことか?
books.shoeisha.co.jp/book/b72093.html

独習C++が独習Cを読んでいる(C言語は既習である)ことを前提に書かれているのはその通り。

643 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/01(日) 21:02:35.80 ]
>>642
おおスマン
見落としていた

644 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/02(月) 03:19:18.51 ]
昨日からC言語始めたプログラム初心者です

四捨五入のプログラムで
例えば1.666を第3位で四捨五入すると1.670000って表示されるんだけど
これを1.67と表示させるにはどうやったらできますか?

645 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/02(月) 03:24:44.66 ]
printf("%.2f",1.67);

646 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/02(月) 03:49:55.45 ]
>>645
サンクス

647 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/02(月) 20:05:15.76 ]
>>644
つ[ "%g"]

648 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/05(木) 17:20:56.61 ]
CLRのコンソールのメイン関数って、Microsoft独自のモノですか?
それとも、C++の新規格のメイン関数なのですか?

#include "stdafx.h"

using namespace System;

int main(array<System::String ^> ^args)
{
Console::WriteLine(L"Hello World");
return 0;
}


649 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/05(木) 18:25:56.69 ]
>>648
該当スレできけば?
くだすれC++/CLI(初心者用)part2
toro.2ch.net/test/read.cgi/tech/1268613679/

650 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/05(木) 18:34:32.79 ]
>>648
そもそもnamespace Systemなんて標準のC++にはないよ。



651 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/05(木) 18:50:39.50 ]
CLIで探せばよかったのですね。Thanx!

652 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/05(木) 20:26:16.99 ]
c++簡易ブラウザーを作りたい
boost::asioでソケット周りできた。クッキーも仕様書みながらある程度できた。
javascriptはECMAScriptと戦わないとだめなのか?

653 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/05(木) 20:41:16.75 ]
モジラやググールのを使え

654 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/05(木) 21:04:59.82 ]
V8が面白そうだ。先は長いな…

655 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/06(金) 00:36:28.03 ]
DOMをやるのかやらないのかでだいぶ違う
ブラウザの進化の過程をたどるか、あるいは新発想のアーキテクチャでいくか。
ある程度の完成物を狙うなら、いったん、V8なり、JSCなりを呼ぶ実装がいい
そもそも、JavaScriptエンジンのインタフェース自体から、学ぶ点がある

656 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/06(金) 16:48:33.44 ]
ECMAScript - Wikipedia
ja.wikipedia.org/wiki/ECMAScript



657 名前:デフォルトの名無しさん mailto:sage [2012/04/14(土) 15:40:27.10 ]
int a=ランダム値;
bool flag;
if(a==1 || a==42 || a==145)flag=true;

↑こんな感じのことをやりたいんですが、
(a==1 || a==42 || a==145) ←ここのとこを簡単に書く方法ってないですかね?
例えば
(a==(1 || 42 || 145)) みたいな。(これじゃ当然無理ですけど)

何か方法があれば教えて下さい。よろしくお願いします。


658 名前:デフォルトの名無しさん mailto:sage [2012/04/14(土) 15:46:14.83 ]
bool check(int const a)
{
static const int checkers[] = {1, 42, 145};
for (int ic = 0; ic < sizeof(checkers) ? sizeof(* checkers); ++ic) {
if (a == checkers[ic]) return true;
}
return false;
}

bool flag = check(a);

659 名前:デフォルトの名無しさん mailto:sage [2012/04/14(土) 22:09:09.10 ]
最終的に吐き出されるバイナリが、結局、
(a==1 || a==42 || a==145) みたいなことになるんだろうから、
(a==1 || a==42 || a==145) で十分に簡潔と言えるんじゃなかろうか。

もちろん、そんなクジみたいな抽選をやたらとあちこちで実行してるなら、
全体的に読みやすいように、書き様はあると思うが。マクロとかで。

660 名前:デフォルトの名無しさん mailto:sage [2012/04/14(土) 22:10:54.95 ]
こうなら書けるな 発想の転換の一助になれば。

flag=false;
select(i){
case 1: case 42: case 145: flag=true;
}



661 名前:デフォルトの名無しさん mailto:sage [2012/04/14(土) 22:25:07.23 ]
<< とか使う

662 名前:デフォルトの名無しさん mailto:sage [2012/04/14(土) 23:48:08.59 ]
bool operator,(〜)とか使う

663 名前:デフォルトの名無しさん mailto:sage [2012/04/15(日) 00:10:01.79 ]
bool f(int a){
struct ck{ck(int a):v(a),t(false){}ck&operator,(int a){t=t||a==v;return*this;}operator bool(){return t;}int v;bool t;};

return ck(a),1,25,142; }

664 名前:デフォルトの名無しさん mailto:sage [2012/04/15(日) 00:23:45.95 ]
可変長引数でチェック関数作るとか

665 名前:デフォルトの名無しさん mailto:sage [2012/04/15(日) 08:09:44.01 ]
flag = (a==1 || a==42 || a==145);
が、一番シンプルに見えるわけだがw

666 名前:デフォルトの名無しさん mailto:sage [2012/04/15(日) 14:31:40.48 ]
Perl6のJunctions風の何かを作るといいのかな

667 名前:デフォルトの名無しさん mailto:sage [2012/04/15(日) 21:22:35.70 ]
D言語のlazy 相当の機能が有ればなあ

668 名前:543 mailto:sage [2012/04/18(水) 22:11:53.62 ]
0〜999の番号を10000の要素にランダムに割り当てるときに
各番号が10回ずつ(各番号が同じ回数という意味で)出てくるように割り振りたいのですが
なにかいい方法ありませんか?

669 名前:デフォルトの名無しさん mailto:sage [2012/04/18(水) 22:16:13.58 ]
vectorに突っ込んでrandom_shuffle

670 名前:デフォルトの名無しさん mailto:sage [2012/04/18(水) 22:20:46.95 ]
>>669
そのような関数があったんですね。勉強になります!
ありがとうございました。



671 名前:デフォルトの名無しさん mailto:sage [2012/04/18(水) 22:28:39.71 ]
質問です
C言語でマイクから入力した音声を送信する方法
もしくはマイクから入力された音声がどこに保存されているかを教えてください


672 名前:デフォルトの名無しさん mailto:sage [2012/04/18(水) 22:43:31.86 ]
環境も書かずになんて間抜けな質問を……

673 名前:デフォルトの名無しさん mailto:sage [2012/04/18(水) 23:00:22.03 ]
失礼しました
環境はbcpadです

674 名前:デフォルトの名無しさん mailto:sage [2012/04/19(木) 00:00:32.77 ]
WindowsならmmsystemだからWin32APIスレで聞いた方がいいだろ

675 名前:デフォルトの名無しさん mailto:sage [2012/04/19(木) 06:51:33.03 ]
>>674
情報ありがとうございます!

676 名前:デフォルトの名無しさん mailto:sage [2012/04/19(木) 14:52:44.05 ]
コマンド・ライン引数でargc と argv というのが伝統的に使われている
そうですが、それぞれの語源(何の略) か、教えてください。

677 名前:デフォルトの名無しさん mailto:sage [2012/04/19(木) 15:05:36.01 ]
argument count value

678 名前:デフォルトの名無しさん mailto:sage [2012/04/19(木) 15:26:44.81 ]
>>677
ありがとうございます!


679 名前:デフォルトの名無しさん mailto:sage [2012/04/19(木) 21:37:51.52 ]
VC++をつかってC言語でLifeGameを書こうとしてみたのですが、

680 名前:デフォルトの名無しさん mailto:sage [2012/04/20(金) 01:33:52.49 ]
セルがモニタから飛び出して勝手に増殖し出してしまって、



681 名前:デフォルトの名無しさん mailto:sage [2012/04/20(金) 02:54:49.21 ]
|....,,__
|_::;; ~"'ヽ
| //^''ヽ,,)
|  i⌒"
| ∀`) < 誰もいない きのこるならいまのうち
|⊂
| ノ
      _,,,......,,__
  /_~ ,,...:::_::;; ~"'ヽ
 (,, '"ヾヽ  i|i //^''ヽ,,)
   ^ :'⌒i    i⌒"
      |( ´∀`) < きのこ のこーのこ げんきのこ ♪
      |(ノ   |つ
      |     |
     ⊂ _ ノ
       ""U
      _,,,......,,__
  /_~ ,,...:::_::;; ~"'ヽ
 (,, '"ヾヽ  i|i //^''ヽ,,)
   ^ :'⌒i    i⌒"
     (´∀` )| < エリンギ まいたけ ブナシメジ ♪
    ⊂|  (ノ |
      |     |
      ヽ _ ⊃
      .U""
|
| ミ
| ミ  サッ!
| ミ
|

682 名前:デフォルトの名無しさん mailto:sage [2012/04/20(金) 03:00:54.75 ]
罠を張って待っていることも知らずに、

↑なーんてなことを書き出してしまって、

683 名前:デフォルトの名無しさん mailto:sage [2012/04/20(金) 04:06:50.55 ]
【そりゃないよドコモさん】ドコモが日本通信に提訴された経緯
weekly.ascii.jp/elem/000/000/084/84599/
 ドコモは「必要な費用」と説明したとのことですが、その費用はそもそも算定式に含まれているはず、
というのが日本通信側の主張です。
 このため日本通信が差額の支払いを一時停止したところ、ドコモ側は「接続を切断する」と回答。
結果、ユーザーへの影響を考慮して、日本通信側はドコモ側の要求どおりの支払いを続けている、
というのが今の状況です。

684 名前:デフォルトの名無しさん mailto:sage [2012/04/24(火) 06:23:00.54 ]
宿題で出されたこの問題が分からないのですが、誰か教えてくれませんか。

1〜9までの連続する数字の間に和・差・積の演算子(+, -, *)を適当に入れて、
式の値がちょうど 100 となる例を挙げよ(10とおりだけ書け)。

たとえば、
 1 + 2 * 3 * 4 * 5 + 6 * 7 - 8 * 9 = 91
というような計算をする。ただし、この例では式の値が91となるので答えではない。

685 名前:デフォルトの名無しさん mailto:sage [2012/04/24(火) 06:33:39.44 ]
このスレに何の関係が

686 名前:デフォルトの名無しさん mailto:sage [2012/04/24(火) 06:35:50.34 ]
ごめんなさい、宿題スレに書き直してくるので無視してください

687 名前:デフォルトの名無しさん mailto:sage [2012/04/24(火) 06:55:17.27 ]
eval() を実装しろという問題だな

webサービスを呼ぶ、でもいい

688 名前:デフォルトの名無しさん [2012/04/25(水) 00:26:53.55 ]
csvのデータを読み込み、このデータセットの平均値Ave を求めて
標準出力するCプログラムを書きたいのですがどうすればいいですか?

689 名前:デフォルトの名無しさん mailto:sage [2012/04/25(水) 00:36:54.63 ]
まず深呼吸します

690 名前:デフォルトの名無しさん mailto:sage [2012/04/25(水) 07:58:46.21 ]
宿題レベルの質問に見えるが、csvに何が詰まってるかによるな(22,2Cの扱い)。

出題者が、データはこれな。って言ってきてないか。



691 名前:デフォルトの名無しさん mailto:sage [2012/04/25(水) 14:26:18.67 ]
図書館でプログラミング作法を借りてくる

692 名前:デフォルトの名無しさん mailto:sage [2012/04/25(水) 16:16:06.77 ]
C言語で、できるだけ簡単な文法だけを用いて、「ある数列から重複している値があれば取り出す」という関数を作りたいのですが、どうすればいいのですか?

693 名前:デフォルトの名無しさん mailto:sage [2012/04/25(水) 16:36:07.14 ]
>>692
数列は長いか?(数万件)
数値範囲が予測できるか?
範囲が狭いか?(1~10など)
小数点以下も必要か?
で方法が違う。

694 名前:デフォルトの名無しさん mailto:sage [2012/04/25(水) 16:38:59.09 ]
>>692
CSTLのsetを使う


695 名前:デフォルトの名無しさん mailto:sage [2012/04/25(水) 16:52:07.30 ]
回答ありがとうございます。

数列は、int型で自由に入力したものになるので、長くなる可能性があります。
値の範囲は予測できません。
小数点は利用しません。

696 名前:デフォルトの名無しさん mailto:sage [2012/04/25(水) 17:24:24.59 ]
要はエスパー待ちて事だな。

697 名前:デフォルトの名無しさん mailto:sage [2012/04/25(水) 17:26:40.06 ]
>>692
「重複している値があれば取り出す」とあるが、例えば「1,1,1,1,1」という数列があったとき、
1は1回だけ取り出されるのか、それとも4回取り出されるのか。

698 名前:デフォルトの名無しさん mailto:sage [2012/04/25(水) 18:08:25.02 ]
どっちでもいいじゃん

for (i=0; i<N; ++i) {
IntSet_insert(tmp, data[i], &success);
if (!success) {
IntSet_insert(s, data[i], NULL); //1回だけの場合
IntList_push_back(l, data[i]); //複数回の場合
}
}

699 名前:デフォルトの名無しさん mailto:sage [2012/04/25(水) 18:21:15.51 ]
取り出すってどういうことを言ってるんだろうか

700 名前:デフォルトの名無しさん mailto:sage [2012/04/25(水) 18:33:23.57 ]
>>699
日本語の問題だな。
取り出す→Action
抽出、除外→Process



701 名前:デフォルトの名無しさん mailto:sage [2012/04/25(水) 18:46:10.92 ]
配列から取り出して元の配列の要素数を減らすのか、取り出したものを別の配列に入れて再利用するのか






[ 新着レスの取得/表示 (agate) ] / [ 携帯版 ]

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

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