トップページ⇒tech
1001コメント310KB

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

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2008/02/05(火) 01:18:41
エスケープシーケンスやWin32APIなどの環境依存なものでもOK。
ただしその場合、質問者は必ず環境を書きましょう。
※sage禁止です(と代々スレに書いてありますが自己判断で)。
【前スレ】
【初心者歓迎】C/C++室 Ver.47【環境依存OK】
http://pc11.2ch.net/test/read.cgi/tech/1200464091/
【アップローダー】(質問が長い時はココ使うと便利)
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm
0002デフォルトの名無しさん2008/02/05(火) 01:31:04
2get
0003デフォルトの名無しさん2008/02/05(火) 01:51:09
C はもういいだろ
0004デフォルトの名無しさん2008/02/05(火) 03:58:45
int *p;
p=new int[3];
deleteせずに
p=new int[4];
deleteせずに
p=new int[2];
とした場合どうなりますか?
0005デフォルトの名無しさん2008/02/05(火) 04:39:44
>>4
p は最後の new int[2] で確保された配列の先頭を指す。
前2つの new で確保された配列を破棄する手段はなくなっている。
0006デフォルトの名無しさん2008/02/05(火) 06:52:35
>>5
ありがとうございます。領域の再利用も破棄もされないまま新たに確保されちゃうんですね
新たにnewするまえにdeleteを必ずつけるようにします
0007デフォルトの名無しさん2008/02/05(火) 07:05:31
>>6
入門書買えやカス!
0008デフォルトの名無しさん2008/02/05(火) 07:18:25
>>7
うっせーカス!
0009デフォルトの名無しさん2008/02/05(火) 07:20:47
>>8
そうだよな! ネットの入門サイトにも載ってるよな!
0010デフォルトの名無しさん2008/02/05(火) 09:58:32
vector<string> v;
として、vを
{"AAAAAA","BBBBBB","CCCCCC","DDDDDD","EEEEEE"};
という内容で初期化したいときは、push_back()とかで1つずつ代入するしかないですか?
0011デフォルトの名無しさん2008/02/05(火) 10:51:55
>>10
イテレータを受け取るコンストラクタを使うといい。
コンストラクタと同じ引数で assign() というメンバ関数もあるから覚えとこう。
0012デフォルトの名無しさん2008/02/05(火) 11:36:57
>11
ありがとうございます。
でもやり方がわかりませんでした。もう少し教えてください。

std::string a[] = {"AAAAA", "BBBBB", "CCCCC", "DDDDD"};
std::vector<std::string> v(a);
これだと、コンパイルエラーになってしまいました。
invalid conversion from 'std::string*' to 'unsigned int'
どう書けばよいですか?
0013デフォルトの名無しさん2008/02/05(火) 12:13:11
>>12
イテレータを受け取るコンストラクタを使えってばよ。
0014デフォルトの名無しさん2008/02/05(火) 12:20:42
>>13
イテレータを渡したいけど、どこにあるのかわかりません
0015デフォルトの名無しさん2008/02/05(火) 12:28:14
>>14
配列要素へのポインタはイテレータとして使える。
0016デフォルトの名無しさん2008/02/05(火) 12:34:21
>>15
ありがとうございます。
std::string a[] = {"AAAAA", "BBBBB", "CCCCC", "DDDDD"};
std::vector<std::string> v(&a[0], &a[3]);
で、できました!
0017デフォルトの名無しさん2008/02/05(火) 12:57:07
それだと"DDDDD"は収容されないけどな。
0018売国まるはん2008/02/05(火) 13:11:26
パチンコスレで遠隔、ホルコン、サクラ、マネーロンダリングなどについて書き込むと渋谷マルハン社員やマルハンに依頼された
ネット工作会社がスレ荒らしをしてスレが機能停止します。
↓↓工作員の荒らしのやり方↓↓
2008/01/10(木)ID:iA54nBU50
■■■■マルハン総合スレッド 9■■■■http://money6.2ch.net/test/read.cgi/pachij/1187021165/783-784
【宮崎県都城市】パチ事情その�Ahttp://money6.2ch.net/test/read.cgi/pachij/1187189246/658-659
【山と川】宮崎県児湯付近PART1【自然イパーイ】http://money6.2ch.net/test/read.cgi/pachij/1188235164/471-472
【基地外が大暴れ4】エスパス日拓総合スレ【18発目】http://money6.2ch.net/test/read.cgi/pachij/1188885488/401-410
2008/01/13(日)ID:1HLcWzUK0
【基地外が大暴れ4】エスパス日拓総合スレ【18発目】http://money6.2ch.net/test/read.cgi/pachij/1188885488/461-462
■■■■マルハン総合スレッド 9■■■■http://money6.2ch.net/test/read.cgi/pachij/1187021165/809-810
【香川】パーラーグランドのスレ2【徳島】http://money6.2ch.net/test/read.cgi/pachij/1188315438/324
【延岡】宮崎県北情報PART3【日向】http://money6.2ch.net/test/read.cgi/pachij/1196865970/186

工作員に荒らされ機能停止したスレ
■■■■マルハン総合スレッド 9■■■■http://money6.2ch.net/test/read.cgi/pachij/1187021165/
【山崎】MPT渋谷パート9【シャネル】http://money6.2ch.net/test/read.cgi/pachij/1197771701
【基地外が大暴れ4】エスパス日拓総合スレ【18発目】http://money6.2ch.net/test/read.cgi/pachij/1188885488
MPT渋谷はマルハン・パチンコ・タワー渋谷の略です。

パチンコ産業は荒らすことでレスとレスの間を空けて読む気をなくさせたり
マネーロンダリング、さくら、ホルコン、遠隔、などの風評被害を最小限に抑えようとしてる。

新スレ→○○○マルハンパチンコタワー渋谷パート10○○○
★★★★★このスレの解説★★★★★を読んでみるとよく判る。
http://money6.2ch.net/test/read.cgi/pachij/1201304777/52-54

0019デフォルトの名無しさん2008/02/05(火) 13:29:53
assign()のソースを出し渋ってる奴から使えと言われてもねー
0020デフォルトの名無しさん2008/02/05(火) 15:11:24
はじめまして。今までCの学習用開発環境としてvmware上のFreeBSDでemacsを使ってきた者です。
何かと不便なのでwindows上で開発環境を整えようと思うのですが、何かお勧めのソフトはありますでしょうか?
0021デフォルトの名無しさん2008/02/05(火) 15:15:20
>>20
cygwin
0022デフォルトの名無しさん2008/02/05(火) 15:24:55
>>20
Eclipse + CDT
0023デフォルトの名無しさん2008/02/05(火) 15:47:35
このような構造体があるとして
struct KOUZOUTAI{
 std::vector<int> Array;
 int nNum;
 std::string str;
};

KOUZOUTAI g_Kouzoutai;

std::ofstream fout;
fout.write( (char*)(&g_Kouzoutai), sizeof( g_Kouzoutai ) );

こんな風に構造体を書き込んでおきます。

このデータを次に読み込みたい場合、
KOUZOUTAI data;
fin.read( (char*)(&data), sizeof( data ) );

こうやって読み込むと配列の部分が正常に読み込めません。
何かいい方法はありますか?
0024デフォルトの名無しさん2008/02/05(火) 15:53:06
>>23
ありません。つーか、そもそもそれではvectorは書き込まれていない筈です。ご愁傷様。
0025デフォルトの名無しさん2008/02/05(火) 15:56:15
std::vectorの中身をserialize/unserializeする関数を作成して、保存/読み込み時にその関数を経由させる。
0026デフォルトの名無しさん2008/02/05(火) 15:58:56
動的配列はメモリが無条件に動的になるわけじゃなく、
動的配列を実現できるようなメンバ関数でアクセスするから動的配列たりうるわけで。
エレベーターのボタンを押さずに扉こじ開けてもエレベーターには乗れないでしょ?
0027デフォルトの名無しさん2008/02/05(火) 16:01:53
その例えもどうかと思う。
0028デフォルトの名無しさん2008/02/05(火) 17:20:39
ただの配列なら書き込めますか?
0029デフォルトの名無しさん2008/02/05(火) 17:21:42
はい。
0030デフォルトの名無しさん2008/02/05(火) 17:26:50
わかりました
ありがとうございました
0031デフォルトの名無しさん2008/02/05(火) 19:03:05
下記のコードはBCB6で通りません。

template<typename FunctionPtr>
struct FunctionTraits;

template<typename ResultType,class ClassT>
struct FunctionTraits<ResultType (ClassT::*)(void)>
{
typedef ClassT ClassType;
};

テンプレートの関数ポインタによる特殊化でメソッドのクラスを推測することは不可能なんでしょうか。
0032デフォルトの名無しさん2008/02/05(火) 19:35:31
VCでは通ったが。
0033デフォルトの名無しさん2008/02/05(火) 19:46:16
>>31
部分特殊化は VC6 あたりでも対応してなかったと思う。
コンパイラが対応してないのはありうると思う。
0034デフォルトの名無しさん2008/02/05(火) 20:08:26
とりあえずBCB2007で通るか検証してみては
0035デフォルトの名無しさん2008/02/05(火) 21:20:13
最近Cを勉強し始めたのですが、とりあえずチンチロリンでも
作ってみろというようなことをいわれました。

早速やってみようと思ったのですが、何から手をつけていいのか
さっぱりです。何か良い書籍などあるでしょうか?
チンチロリンのサンプルプログラムを見てみるのも勉強になると
いわれたので、検索してみたのですがサンプルが無く困っています。

どうかよろしくお願いします。
0036デフォルトの名無しさん2008/02/05(火) 21:47:25
本屋に行って何冊か立ち読みしてみるか、ぐぐればいいと思うよ
0037デフォルトの名無しさん2008/02/05(火) 21:58:18
>チンチロリンのサンプルプログラムを見てみるのも勉強になると
>いわれたので
簡単にそんなものが見つかるのが前提のアドバイスにワロタw
でも、そういう簡単なゲームを作るのはいい練習になると思うよ。

とりあえず、今勉強に使ってる本かサイトか知らんが
その知識だけで自分で作ってみるといいよ。
多分いろいろと汚いプログラムになりはするとは思うけど、
そうやって作ってみた後にサンプルなり本なりを読むと、
どこがマズかったのかってのがよく分かっていいと思うぜ。
0038デフォルトの名無しさん2008/02/05(火) 22:03:38
>>36
今は、手元にある入門書とぐぐって何とかやってる状態です。
何冊か立ち読みして、よさそうなのをもう1冊買ってみようかと
思います。ありがとうございます。

>>37
簡単に見つかるものじゃないんですね・・。
なんとか形にしてみてから調べてみることにします。
ありがとうございます。
0039デフォルトの名無しさん2008/02/05(火) 23:41:22
VC9ですけど、
std::exceptionにうにこーど入れると文字が壊れますか?
0040デフォルトの名無しさん2008/02/05(火) 23:43:58
>>39
[std::exception unicode]でググって速効。
http://jinguru.blog86.fc2.com/blog-entry-10.html
0041デフォルトの名無しさん2008/02/05(火) 23:56:32
やっぱりそうですか。
0042デフォルトの名無しさん2008/02/05(火) 23:59:49
UTF-8なら入れられると思う。そこまでする必要があるかは別として。
0043デフォルトの名無しさん2008/02/06(水) 05:39:37
コンソールアプリケーションで、ユーザにインプットをもらって処理をするコードがあります。
その時、
int a;
cin >> a;
として、入力が数字ではなかったとき、変数aにはなにも代入されず、
ユーザが行った入力はどこかのバッファに溜まってる
のでしょうか。その次の入力から動作がおかしくなります。
あと、もし上記が正しいとすると、ユーザからの入力を受け取る処理は、
とりあえずstringで受けるべきなのでしょうか?
0044デフォルトの名無しさん2008/02/06(水) 10:57:57
>>43
intには数字しか読込めない。今の場合、何も読込まれずに
cinにはfailbitが立つ。cin.clear()か何かでgoodbit立てない
限り次の読み込みは出来ない。stringにすべきかどうかは何を
読み込むかによる。
0045デフォルトの名無しさん2008/02/06(水) 11:34:06
>>44
ありがとうございます。自分でも調べてみたのですが、

int a;
cin >> a;
入力データを使って処理する
cin.clear();
cin.ignore(numeric_limits<int>::max(),'\n');

とするとcinが元の状態に戻りました。
ここで、clear()はgoodbitを立てるものだとして、
ignore()は指定文字数分か指定した文字(上記だと'\n')が出るまで
入力値をバッファから消す、という処理ですよね。

cinの入力ってこう書かないとだめなのでしょうか?
(結構面倒かも、と思った)
■ このスレッドは過去ログ倉庫に格納されています