【初心者歓迎】C/C++室 Ver.54【環境依存OK】
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2008/05/14(水) 01:00:02ただしその場合、質問者は必ず環境を書きましょう。
※sage禁止です(と代々スレに書いてありますが自己判断で)。
【前スレ】
【初心者歓迎】C/C++室 Ver.53【環境依存OK】
http://pc11.2ch.net/test/read.cgi/tech/1208989385/l50
【アップローダー】(質問が長い時はココ使うと便利)
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm
0187デフォルトの名無しさん
2008/05/23(金) 00:59:450188デフォルトの名無しさん
2008/05/23(金) 01:03:42erase()ではできませんが、advance()辺りでIteratorを作ればできなくはありません。
0189デフォルトの名無しさん
2008/05/23(金) 01:09:11こういうノリでいける気がするけどどうなんだか
0190デフォルトの名無しさん
2008/05/23(金) 01:36:58Windowsのwchar_tはUTF-16で問題ないと思う。
Linuxのglibcのwchar_tはUCS4で問題ないと思う。
Mac OS X では wchar_tはサポートされていない。
それ以外のUNIXではwchar_tの中身はUnicodeではないことが多い。
0191デフォルトの名無しさん
2008/05/23(金) 02:48:50いけるね。
v[3]とv.begin()+3は結局同じ要素をさしているけど
後者はイテレータとして扱われる。
Accelerated C++でもそういう例が出てくる。
0192デフォルトの名無しさん
2008/05/23(金) 03:35:08型の詳細がわからないオブジェクト同士の比較(メンバ変数の比較)
をするのにいい関数ってありますか?
0193デフォルトの名無しさん
2008/05/23(金) 04:58:15「比較」というのは、どういう比較をしたいのか。この場合の「いい」とは何を指すのか。
現状も願望も曖昧に書かれているから、答えようが無い。
0194デフォルトの名無しさん
2008/05/23(金) 08:43:57細かいことを言うと、あとでvectorをやっぱりlistにしたい
何てことになったときに書き直さなきゃならなくなる。
なのでadvanceで書いておいたほうが良いかも知れない。
0195デフォルトの名無しさん
2008/05/23(金) 08:52:24そこで boost::next() ですよ。
0196デフォルトの名無しさん
2008/05/23(金) 12:13:17advance()とイテレータの加算で解決できました。
ありがとうございました。
>>195
boostというライブラリさえ知りませんでした
おかげで知識の幅が広がりました
0197デフォルトの名無しさん
2008/05/23(金) 12:30:190198デフォルトの名無しさん
2008/05/23(金) 17:35:06char ch [4] = { 0x10, 0x11, 0x12, 0x00}
みたいに値を代入できますが、
char ch [4];
char ch = { 0x10, 0x11, 0x12, 0x00};
みたいに、一旦宣言だけしておいて代入、みたいなことはできませんよね。
では、クラスのchar型のデータメンバをコンストラクタで初期化する時に
char ch [4] = { 0x10, 0x11, 0x12, 0x00}
みたいに格納したいときはどうすればよいでしょうか??
strcpy()は使えないですよね??
0199デフォルトの名無しさん
2008/05/23(金) 17:36:21char ch = { 0x10, 0x11, 0x12, 0x00};
2行目、先頭のcharが余計でした。
0200デフォルトの名無しさん
2008/05/23(金) 17:39:30ch[0] = 0x10;
ch[1] = 0x11;
ch[2] = 0x12;
ch[3] = 0x00;
0201デフォルトの名無しさん
2008/05/23(金) 17:41:23やっぱりコンストラクタでやる場合はそれしかない感じでしょうか。
あとはstaticメンバにしてグローバル領域で初期化ぐらいでしょうか・・
0202デフォルトの名無しさん
2008/05/23(金) 17:42:100203デフォルトの名無しさん
2008/05/23(金) 17:59:210204デフォルトの名無しさん
2008/05/23(金) 18:03:29vector<int> v, v2;
v = list_of(1)(2)(3);
// v = {
v2 = list_of(0).range(v).range(v.begin(),v.end())(4);
// v2 = [0,1,2,3,1,2,3,4]
0205デフォルトの名無しさん
2008/05/23(金) 18:04:56boostにこんなのもある。
生配列に使えたか分からんけど
using namespace boost::assign;
vector<int> v, v2;
v = list_of(1)(2)(3);
// v = {1,2,3}
v2 = list_of(0).range(v).range(v.begin(),v.end())(4);
// v2 = [0,1,2,3,1,2,3,4]
0206デフォルトの名無しさん
2008/05/23(金) 18:08:43boostが使えなくてもoperator()()で糖衣構文が作れるから忘れないでいて欲しい。
0207デフォルトの名無しさん
2008/05/23(金) 18:43:50scanf("%s",input);
scanfで読み込んだファイル名をhoge.txtとして
outfileにhogehoge_hoge.txtと代入するにはどうしたらいいですか?
0208デフォルトの名無しさん
2008/05/23(金) 18:50:260209デフォルトの名無しさん
2008/05/23(金) 19:08:360210デフォルトの名無しさん
2008/05/23(金) 19:11:230211デフォルトの名無しさん
2008/05/23(金) 19:12:580212デフォルトの名無しさん
2008/05/23(金) 19:14:090213デフォルトの名無しさん
2008/05/23(金) 19:54:53>>203
ありがとうございます。コンストラクタ内でコピーでなんとかなりました。
0214デフォルトの名無しさん
2008/05/23(金) 19:59:20ss << "abcdefghijklmn";
ss.str().replace(2,1,1,'x');
fout << ss.str();
みたいなことをしたいのですが、文字列が"abcdefghijklmn"のまま出力されます。
こういうことはできないのでしょうか??
0215マイク ◆yrBrqfF1Ew
2008/05/23(金) 21:34:20stringstream ss;
ss << "abcdefghijklmn";
string str(ss.str());
str.replace(2,1,1,'x');
fout << str;
std::stringstream::str()は呼ばれるたび一時オブジェクトを生成して返すから文字が変更されない、気がした。
詳しくはC++の仕様書なりライブラリドキュメントを参照すべし。
0216マイク ◆yrBrqfF1Ew
2008/05/23(金) 21:41:51const string &str(ss.str().replace(2,1,1,'x'));
の方が無駄なインスタンス作らないかも。
0217デフォルトの名無しさん
2008/05/23(金) 22:46:48プログラミング大会とかゲームコンテストってあるのですか?
できれば高校在学中にどうにかして成果をあげたいので・・・
ゲームの作り込みとかもあるんだろうけど、
意見ある方や知ってる方などいたら教えてくださいな
0218デフォルトの名無しさん
2008/05/23(金) 22:54:44マイク、replaceの戻り値はstring&だから、それヤバイよ。
0219デフォルトの名無しさん
2008/05/23(金) 22:55:59HSPコンテスト
0220デフォルトの名無しさん
2008/05/23(金) 22:58:57HSPコンテストは出しましたw
1次予選は受かったものの賞はもらえませんでしたが・・・
HSPでゲームやツールを作ったくらいでは成果にならない、
ということも耳にします。
0221デフォルトの名無しさん
2008/05/23(金) 22:59:530222デフォルトの名無しさん
2008/05/23(金) 23:01:210223デフォルトの名無しさん
2008/05/23(金) 23:02:18面白いゲームが作れるかは別。
0224デフォルトの名無しさん
2008/05/23(金) 23:04:30ゲームの一部の開発は出来る。ゲームが作りたいの?
0225デフォルトの名無しさん
2008/05/23(金) 23:09:09論旨はわかるけど、別の人を例に出したほうが良いでしょう
0226デフォルトの名無しさん
2008/05/23(金) 23:12:03丁度ばら撒くように賞を出してた頃だったからあれはあれで結構ショックだった。
でもあんなもの何の役にもたたんよ。同人だからな。どうせ219はネタのつもりで書いたんだろう。
0227デフォルトの名無しさん
2008/05/23(金) 23:12:19何でゲーム限定になってるんだ?w
0228デフォルトの名無しさん
2008/05/23(金) 23:12:36http://www.jipdec.or.jp/procon/
0229デフォルトの名無しさん
2008/05/23(金) 23:15:12競いようがない気がするw
0230デフォルトの名無しさん
2008/05/23(金) 23:19:17堀井は言うほど作れなかったよ。
某雑誌の投稿者管理のプログラムを作るのが関の山。
それも、データを変換するとか圧縮するとかいう発想がないために
オンメモリでしか処理できなくて最後は破綻していた希ガス。
0231デフォルトの名無しさん
2008/05/23(金) 23:22:06コンテストもいいのですが、オープンソースの世界にとびこむのはどうでしょうか。
時代遅れの資格試験・どこの馬の骨ともわからないコンテストよりは、はるかに「実績」「キャリア」となり、多くの人に評価されると思います。
Vine Linux のメンテなどは、非常にありがたがられるでしょうね。
年をとると、いろいろなしがらみがあって、こういった方面に手を伸ばすリソースがないのです。
0232デフォルトの名無しさん
2008/05/23(金) 23:42:450233デフォルトの名無しさん
2008/05/23(金) 23:47:42ss << "abcdefghijklmn";
fout << ss.str().replace(2,1,1,'x');
0234デフォルトの名無しさん
2008/05/23(金) 23:53:10おい
const string& を std::replaceするのか
0235デフォルトの名無しさん
2008/05/23(金) 23:57:42std::string std::stringstream::str() const;
だよ。
0237デフォルトの名無しさん
2008/05/24(土) 00:00:41何か日本語的におかしいかな?
0238デフォルトの名無しさん
2008/05/24(土) 00:02:41そこじゃなくて、戻り値がstd::stringだろうと。
値返しでしょ?
0239デフォルトの名無しさん
2008/05/24(土) 00:08:171GBのstr()があったら丸々コピーするのか
0240デフォルトの名無しさん
2008/05/24(土) 00:11:300241デフォルトの名無しさん
2008/05/24(土) 00:12:480242デフォルトの名無しさん
2008/05/24(土) 00:17:21初心者スレなので、初心者のために説明書いておくてst
>>215は問題ない実装。
ただし、ss.str()でインスタンスが作られて、
string strでもう一つインスタンスが作られるので、
ほんの僅かの無駄がある。でも通常気にすることは無いレベル。
>>216は、その僅かな無駄も無くそうとしていて、
const参照による一時オブジェクトの束縛を利用しようとした。
しかし、replaceの戻り値が一時オブジェクトでないので、
束縛出来ず消えてしまい、&strは不正な領域を指してしまう。
>>233は関数から戻るまで、その引数が生存することを利用してる。
str()で作られたインスタンスが、replaceで変更され、
「<<」で出力された後に消える。一番無駄の無い実装。
>>239
そういう場合、普通はstr()などせずにストリームアルゴリズムで扱う。
0243デフォルトの名無しさん
2008/05/24(土) 00:17:39データはstringstreamが握ってるんだから、
std::stringのdata()やc_str()のように、データへの参照を返す手段も
あったほうが良かったよねってことじゃないの
0244デフォルトの名無しさん
2008/05/24(土) 00:34:40>>216はreplaceの戻り値が一時オブジェクトでも不正になる。
0245デフォルトの名無しさん
2008/05/24(土) 00:44:25string::c_str()の存在だって本当は褒められたもんじゃない。
0246デフォルトの名無しさん
2008/05/24(土) 00:44:40const参照は一時オブジェクトを束縛できるよ。
オブジェクトの寿命が参照のスコープまで延命される。
0247デフォルトの名無しさん
2008/05/24(土) 00:45:03>不正になる。
ならないよ。
分かりやすそうなサンプルコードがあった。これ見て。
http://cppemb.blog17.fc2.com/blog-entry-49.html
0249デフォルトの名無しさん
2008/05/24(土) 01:03:09別にプログラマとして「凄腕だった」わけじゃないけど、
一応テニスゲームが入選したことでエニックス(現スクウェア・エニックス)と縁できた人なわけで、
投稿者管理のプログラムが関の山っていうのは、えらく誤解を招く表現だと思うけど。
いずれにせよ、「プログラミングという行為のリアリティ」を経験した上でゲームデザインやってる、
というのは大きいね。
そのフィーリングをまるで知らず、何か肝心のところでピント外れのSEや文系上司、多いものな。
0250デフォルトの名無しさん
2008/05/24(土) 01:40:54軽井沢誘拐案内までは
シナリオ・音楽・グラフィックに加えて
プログラムも組んでたとおもたけど。
0251217
2008/05/24(土) 01:48:53みなさんありがとうございます
軽い処理、ゲームを作るのはプログラマの永遠の課題ですねw
自分のゲーム重いので・・
>>221
HALってこんなこともやっていたのですね・・初耳でした
参考にさせていただきます
>>228
おお このようなものまで
多少調べたのですが出てきませんでした
ありがとうございます、参考にさせていただきます
0252デフォルトの名無しさん
2008/05/24(土) 01:51:23#include <iostream>
#include <string>
int main(){
std::wcout << L"あ" << std::endl;
return 0;
}
何も表示されません。どうすれば良いんですか。
0253デフォルトの名無しさん
2008/05/24(土) 01:53:55std::wcout.imbue(std::locale("japanese"));
したら使えるようになりました。ありがとうございました。
0254デフォルトの名無しさん
2008/05/24(土) 02:25:54優勝すれば大金ゲットのチャンスのある大会。
コンピュータ将棋の大会で優勝したら年収1000万以上らしいよ。
シストレFXグランプリで優勝したら300万で、特別賞が1000万。
YSSと彩のページ http://www32.ocn.ne.jp/~yss/index_j.html
シストレFXグランプリ http://www.fx-gp.com/
0255デフォルトの名無しさん
2008/05/24(土) 14:26:59http://www.gsic.titech.ac.jp/supercon/
高校生で有名なのっていうとコレじゃないかな?グループ参加だけど
0256デフォルトの名無しさん
2008/05/24(土) 18:12:55内部でwchar_tを使用しているので、バイナリファイルの読み込み
にwfstreamを使用しようと思ったのですが、read()のバッファの引数
がwchar_tになってしまうので、このままではwchar_tからcharに変換
するためにコストがかかってしまいます。
C++の標準ライブラリの範囲内で、ファイル名にwchar_tを使いつつ、
char形式のプレーンなバイト列を読み込む方法はありませんでしょうか?
よろしくお願いします。
0257デフォルトの名無しさん
2008/05/24(土) 18:15:08wfstreamでもファイル名はwchar_tではなくてcharですね…
標準ライブラリの範囲内ではファイル名にwchar_tは使えないのでしょうか…
0258デフォルトの名無しさん
2008/05/24(土) 18:19:26fstreamのコンストラクタの引数で、wchar_tも取るんですね。
どうもwfstreamでないとwchar_tを取らないと思い込んでいました。
失礼しました。
0259デフォルトの名無しさん
2008/05/24(土) 18:31:40移植性は無いように思う
0260214
2008/05/24(土) 18:33:32なんだか色々複雑なんですね・・。とても参考になりましたm(_ _)m
0261デフォルトの名無しさん
2008/05/24(土) 18:34:52それはVisual C++など一部処理系の独自拡張。
一般には(現行規格では)、ファイル名の引数の型は
const char*であるものしか存在しない。
もし仮にBoostを使って良ければ、Filesystemのfstreamが使える。
こいつは、ワイド文字列でもファイル名を指定できるようになっていて、
ワイド文字列でファイル名を指定できない環境では、
マルチバイト文字列に変換して開くようになっている。
0262デフォルトの名無しさん
2008/05/25(日) 08:52:53#include <fstream>
std::fstream f(L"test.txt", std::ios::out);
f << L"テスト";
としても何も書かれていないtest.txtが出力されるだけでうまく行きません。
0263デフォルトの名無しさん
2008/05/25(日) 10:39:05#include <locale>
int main()
{
std::wfstream f(L"test.txt", std::ios::out);
f.imbue(std::locale(""));
f << L"テスト";
}
一応、元と合わせておいたけど、
出力だけならofstream/wofstreamで十分。
0264デフォルトの名無しさん
2008/05/25(日) 10:44:29入出力は、8ビットのやつにしとけ
0265デフォルトの名無しさん
2008/05/25(日) 12:01:13自作クラス用にstd::swapを特殊化しようとして上手くいかないんだけど……。
0266デフォルトの名無しさん
2008/05/25(日) 12:11:130267265
2008/05/25(日) 12:23:230268デフォルトの名無しさん
2008/05/25(日) 12:38:12ここに書かれてあるようにcとc++を同時に使うには、はじめに何を宣言したらいいですか?
#include <stdio.h>
#include <stdlib.h>
#include <iostream>
#include "math.h"
#include "time.h"
#include "sift.h"
#include "imgfeatures.h"
#include "kdtree.h"
#include "utils.h"
#include "xform.h"
#include "cv.h"
#include "highgui.h"
#include <cv.h>
#include <cxcore.h>
#include <highgui.h>
こんな宣言したらエラーがでたんですが…
0269デフォルトの名無しさん
2008/05/25(日) 12:54:25何がしたくて、そういう宣言(というかinclude)したんだ?
それとエラーメッセージくらい書かないと、
ここにエスパーは居ないよ。
0270デフォルトの名無しさん
2008/05/25(日) 13:04:46最初から全部宣言してしまえ。と考えるからそうなる
必要になったら追加するように
0271デフォルトの名無しさん
2008/05/25(日) 13:04:47#include <stdio>
これだけ
0272268
2008/05/25(日) 13:07:571>c:\program files\microsoft visual studio 8\vc\include\cstdio(25) : error C2059: 構文エラー : ':'
>c:\program files\microsoft visual studio 8\vc\include\cstdlib(18) : error C2143: 構文エラー : '{' が ':' の前にありません。
1>c:\program files\microsoft visual studio 8\vc\include\cstdlib(18) : error C2059: 構文エラー : ':'
というエラーがだーーーーっとでます。
0273デフォルトの名無しさん
2008/05/25(日) 13:09:200274デフォルトの名無しさん
2008/05/25(日) 13:10:52で、それはCなのかC++なのかはっきりしてもらわないと困る。
0275デフォルトの名無しさん
2008/05/25(日) 13:11:27#include <stdio>
これだけだとエラーでまっせ
0276デフォルトの名無しさん
2008/05/25(日) 13:11:540277デフォルトの名無しさん
2008/05/25(日) 13:17:09cでもともとあったプログラムにC++のソースをドッキングさせることになったので
http://www.geocities.jp/ky_webid/cpp/language/038.html
を試そうとしているところです。
0278デフォルトの名無しさん
2008/05/25(日) 13:18:05環境はvisualstudio2005です
0279デフォルトの名無しさん
2008/05/25(日) 13:20:13extern "C"
{
#include "C_function.h"
}
って囲めばいいよ
0280デフォルトの名無しさん
2008/05/25(日) 13:22:20#include <iostream>
はC++のヘッダーだから、
.cのソースファイルには使えないぞ。
0281デフォルトの名無しさん
2008/05/25(日) 13:34:31class Hoge { float f; };
float f[10];
Hoge hoge[10];
memcpy(f, hoge, sizeof(f));
とするとfにはHogeのfが順番に格納される、という理解は合っているでしょうか。
0282デフォルトの名無しさん
2008/05/25(日) 13:38:33>>class のインスタンスにsizeofを使うとデータメンバだけのサイズが返されますが
そうとは限らないから。
0283デフォルトの名無しさん
2008/05/25(日) 13:42:37floatは4バイトだから32bit環境では期待どおり動くかもしれないが
仮にそれがcharだったら動かないし、64bit環境でコンパイルしたらずれる可能性もある。
0284デフォルトの名無しさん
2008/05/25(日) 13:42:48using namespace std;
int main()
{
cout << "test" << endl;
return 0;
}
268はこれでエラーがでるん?
0285281
2008/05/25(日) 13:44:220286デフォルトの名無しさん
2008/05/25(日) 15:26:41281のHogeはPODになっているから
どんな環境でも問題ないぜ。
■ このスレッドは過去ログ倉庫に格納されています