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


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

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



1 名前:デフォルトの名無しさん mailto:sage [2011/12/12(月) 21:21:26.11 ]
エスケープシーケンスやWin32APIなどの環境依存なものでもOK。
ただしその場合、質問者は必ず環境を書きましょう。
※sage禁止です(と代々スレに書いてありますが自己判断で)。

【前スレ】
【初心者歓迎】C/C++室 Ver.76【環境依存OK
hibari.2ch.net/test/read.cgi/tech/1312621728/

◆ソースのインデントについて
半角空白やTABでのインデントはスレに貼ると無くなります。
そのため、アップローダーに上げるのも手ですが直接貼る場合は、
全角空白か に置換すると見栄えだけはよくなります。

【アップローダー】(質問が長い時はココ使うと便利)
codepad.org/ (コンパイルもできるし出力結果も得られる[]privateをチェック)
ideone.com/ (時間帯によってはcodepadが重い事があるのでここも利用)

152 名前:デフォルトの名無しさん [2011/12/20(火) 22:28:01.19 ]
>>149-150
ありがとうございます

>S(unsigned int v, std::string n) : value(v), name(n) { }
この文法、初めて見たんですが何という名前の機能になりますか?

定義してコンパイルは通ったんですが、要素にアクセスする方法が分からなくて…

153 名前:デフォルトの名無しさん mailto:sage [2011/12/20(火) 23:40:38.22 ]
>>152
ONE.value, ONE.name


154 名前:デフォルトの名無しさん mailto:sage [2011/12/21(水) 01:24:23.57 ]
>>147
inline 関数は定義がいっぱいあってもその内容が完全に同じならおk

155 名前:デフォルトの名無しさん mailto:sage [2011/12/21(水) 01:28:28.64 ]
>>148
こんな感じでがんばれ。
d.hatena.ne.jp/Cryolite/20110920#p1

156 名前:デフォルトの名無しさん [2011/12/21(水) 02:27:39.19 ]
おねがいします。
引数が SIZEの関数があったので
func(SIZE(CX,CY));
と記述したらエラーとなりました。
SIZE size={CX,CY};
func(size); とするとOKでした。
変数を作らずに関数に値を渡すにはどう記述すればいいのでしょうか。


157 名前:デフォルトの名無しさん mailto:sage [2011/12/21(水) 02:31:33.13 ]
>>156
コンパイラがC99またはC++11対応ならSIZE{CX,CY}でいけるんじゃないかな。

158 名前:デフォルトの名無しさん [2011/12/21(水) 03:42:27.32 ]
>>153
ありがとう。動作しました。
こんな文法があるとは。

ただ、これらを配列としてアクセスしたかったりします。
printf(const_array[ONE].name);
のように。

>>149の原理が分かってないので、応用できないというか…
なにか参考URLはないでしょうか
構造体でググっても見つかりません…

159 名前:2011新作展示 [2011/12/21(水) 03:44:15.42 ]
2011新作展示
N級最高等級時計大量入荷
新品種類がそろっています。
baidurl.cn/4ye
baidurl.cn/555
baidurl.cn/556
baidurl.cn/557
baidurl.cn/559


160 名前:144 mailto:sage [2011/12/21(水) 06:52:08.37 ]
>>151
ありがとう



161 名前:デフォルトの名無しさん mailto:sage [2011/12/21(水) 08:52:44.73 ]
>>158
bool operator < (S const & a, S const & b) {
return a.value < b.value;
}

std::map<S, S> make_array(void) {
std::map<S, S> array;
array.insert(ONE, ONE);
array.insert(THREE, THREE);
attay.insert(FIVE, FIVE);
return array;
}

static std::map<S, S> const const_array = make_array();

int main(void) {
std::cout << const_array[ONE].value << std::endl;
std::cout << const_array[ONE].name << std::endl;
}

162 名前:デフォルトの名無しさん mailto:sage [2011/12/21(水) 23:11:15.45 ]

解散コールは1:55から
12.19 街頭演説、国民の怒りと危機管理への不安
www.youtube.com/watch?v=6PQf9GvXWB0


国民に罵声を浴びせられ駅前交番に避難するテレビアカヒの取材班 12/19正午 新橋駅前 
blog-imgs-44.fc2.com/d/e/l/deliciousicecoffee/111219_124643_ed.jpg
        ,:'  .l .::;',. :::;/..://:: /,':/  ', l、 .i  ヽ
.          ,'  ..::| .::;',' :;:','フ'7フ''7/   ',.ト',_|, , ',.',
       ,'   .::::::!'''l/!:;'/ /'゙  /     '! ゙;:|:、.|、| 'l
.         ,'.  .:::::::{ l'.l/  、_  _,.      'l/',|.';|
       l  :::::::::::';、ヾ      ̄     `‐-‐'/! ';. '
.         ! :::::::::::/ `‐、        ゝ   |'゙ |
       | ::::::::/   \    、_, _.,.,_ ノ::: !  野田政権が早く終わりますように
       |::::/.     _rl`': 、_     ///;ト,゙;:::::./
..      `´      /\\  `i;┬:////゙l゙l ヾ/
                ,.:く::::::::`:、\ 〉l゙:l  / !.|
.            /:.:.:.:\:.:.:.:.`:、ソ/:.:|    | |   19日の報道ステーション
           /.:.:.:.:.:.:.:.:.:\:.:.:.:У:.:;l     livedoor.blogimg.jp/kingcurtis/imgs/e/d/ed2dbc66.jpg 

163 名前:デフォルトの名無しさん mailto:sage [2011/12/22(木) 06:29:56.60 ]
class A{
 int hoge(){}
}
と書いてもコンパイルエラーにならないが、
class A{
 int hoge();
}
int A::hoge(){}
と書くと、「値を返さなければいけません」のようなコンパイルエラーになるのは何故ですか?
両者は同じではないですか?

164 名前:デフォルトの名無しさん mailto:sage [2011/12/22(木) 06:37:16.94 ]
ttp://codepad.org/NM2qcsIg
文句言われるけど

165 名前:163 mailto:sage [2011/12/22(木) 07:40:15.39 ]
>>164
ありがとうございます。
気になったらとりあえずcodepadに行ってみるのがいい感じですね。

mingwだと良く見ると警告が出ていて、
ideon、Visual C++だと警告すら出ませんでした。

警告に対する設定の違い見たいですね。。。

166 名前:デフォルトの名無しさん mailto:sage [2011/12/22(木) 07:41:49.56 ]
前者は呼ばれない関数だからだろ。呼べばエラーになるよ。

167 名前:デフォルトの名無しさん mailto:sage [2011/12/22(木) 07:49:11.02 ]
#include <iostream>
class A{
private:
 int ababababa(void)
 {
  std::cout << "hoge";
  return 1;
 }
};
int main()
{
 A a;
 a.ababababa();
 std::cout << "foo";
}
単体試験をしたいのですが、ababababa(void)がprivateであるためアクセスできません。
クラスを変更せずに試験を行うことは出来ませんか?
クラスの内部にfriendを書く以外の方法があれば教えて欲しいです。

168 名前:デフォルトの名無しさん mailto:sage [2011/12/22(木) 07:50:39.96 ]
#define private public

169 名前:デフォルトの名無しさん mailto:sage [2011/12/22(木) 08:48:37.01 ]
名前の違う、自由に改変可能な、同じ内容のクラスを作って
対象のクラスのポインタをそのクラスのポインタにキャストする

170 名前:167 mailto:sage [2011/12/22(木) 09:41:48.72 ]
>#define private public
これは…。
恐ろしいものを知りました。

>名前の違う、自由に改変可能な、同じ内容のクラスを作って
ちょっと労力が大きいかも。

おふたかた、ありがとうございます。
因みに、プロの方ですか?現場でもこういったことをするのですか?




171 名前:デフォルトの名無しさん mailto:sage [2011/12/22(木) 09:43:46.66 ]
>前者は呼ばれない関数だからだろ。呼べばエラーになるよ。

呼ばれなければコンパイルされないのか…。
ありがとうございます。

172 名前:デフォルトの名無しさん mailto:sage [2011/12/22(木) 09:47:35.11 ]
呼ばれない関数でも普通はコンパイルされるよ。

173 名前:デフォルトの名無しさん mailto:sage [2011/12/22(木) 10:47:13.94 ]
>>168
背筋が凍った

174 名前:デフォルトの名無しさん mailto:sage [2011/12/22(木) 11:56:21.38 ]
実際>>168がまかり通ってるような現場ってあるの?

175 名前:デフォルトの名無しさん mailto:sage [2011/12/22(木) 12:18:10.65 ]
クラスにfriendを追加したりする変更権限のある人が
テストをした方が良いと思うんだが。

176 名前:デフォルトの名無しさん mailto:sage [2011/12/22(木) 14:39:19.81 ]
>>171-172
呼ばれないメンバ関数をコンパイルしない代表は、VC++。
他人が使うクラスを作るときは要注意。

177 名前:デフォルトの名無しさん mailto:sage [2011/12/22(木) 16:14:40.38 ]
>>176
実例よろ

178 名前:デフォルトの名無しさん mailto:sage [2011/12/22(木) 16:31:36.66 ]
>>163
前者はインライン関数。
インライン関数は一部は一部文法チェックされるようだけど、
呼ばれなければ、returnがなくても怒られないね。
バイナリには含まれないから問題ない。

後者はインライン関数ではないので
呼ばれなくてもバイナリに含まれるから
returnがなければ怒られる。

よって両者は異なる。

179 名前:デフォルトの名無しさん mailto:sage [2011/12/22(木) 22:37:11.15 ]
ひどいコンパイラだ…

180 名前:デフォルトの名無しさん mailto:sage [2011/12/22(木) 22:46:22.31 ]
当然の処置だと思うがね。
インライン関数のマージ作業に意味解析済みである必要は無いというかそもそも無駄なんだから



181 名前:デフォルトの名無しさん mailto:sage [2011/12/22(木) 22:54:10.81 ]
そうかなぁ…
リリースモードならともかく、デバッグモードではちゃんとコンパイルエラーを出して欲しい。
DEFCON^h^h^h^h^h^h警告レベル4でもでなのかしら? …実験してみるかな。

182 名前:デフォルトの名無しさん mailto:sage [2011/12/22(木) 23:02:13.29 ]
未使用だと言うなら警告してくれてもいいとすら思う。

183 名前:デフォルトの名無しさん mailto:sage [2011/12/22(木) 23:53:24.85 ]
>前者はインライン関数。
なんと!
クラス宣言の中に書いてしまうとインライン扱いになるということ?

警告してくれるようなオプションってないのかな?
後で邪魔になっても困る人もいるのでは?

184 名前:デフォルトの名無しさん mailto:sage [2011/12/23(金) 01:09:32.25 ]
震災前

     /::::::::::::::::::::::::::::::;;::ノ ヽ;::\
    /::::::::;;;;;;;;;,,,;;...-‐''"~    ヽ:;::l
     |:::::::::::|    岡田 異音    |ミ|
     |:::::::/     ,,,  ヽ,、   '|ミ|  
     '|:::::::l    '''""   ゙゙゙゙`   |ミ|
       |:::::|.  ,,r ‐、   ,, - 、  |/
     ,/⌒|  ノ ・ _), (. ・ `つ|
     | (   "''''"    |"'''''"  | 
      ヽ,,.        ヽ    |
       |       ^-^_,, -、   |   
         |    _,, --‐''~    ) |  マニフェストもう守れない。どうしよう・・・・ 
         'ヽ  (   ,r''''''‐-‐′ / 


震災後

     |:::::::::/            |ミ|
     |::::::::|   ,,,,,    ,,,,,   |ミ|
     |彡|.  '''"""''   ''"""'' |/
     /⌒|  -=・=‐,   =・=-  |
     | (    "''''"   | "''''"  |  
     .ヽ,,         ヽ    .|  キリッ
        |       ^-^    |
   .     |     ‐-===-   |   大震災が起こったのだからマニフェストの破綻も致し方ありません
         ,\.    "'''''''"   / 
朝鮮民主党
    解党

185 名前:デフォルトの名無しさん mailto:sage [2011/12/23(金) 08:52:29.38 ]
WIN32のAPIのwinsockの関数、「WSACleanup()」というのは、何をする関数なのでしょうか?

「WSAStartup()」と対になって、
初期化・開放 のようなものかと思っていたのですが、
調べてみると、
「WSAStartup()」はメモリを取得するが、
「WSACleanup()」をしても開放しないので、そのうちヒープか何かが無くなって落ちると知りました。

186 名前:デフォルトの名無しさん mailto:sage [2011/12/23(金) 09:00:06.22 ]
何をするのか知らなくてもいいようにそういう関数になってるんだけど

187 名前:デフォルトの名無しさん mailto:sage [2011/12/23(金) 12:32:56.69 ]
今独習C++やっているんですが、

std::ofstream out("test.txt", std::ios::out | std::ios::binary);
double num = 100.45;
out.write((char *) &num, sizeof(double));

の(char *) &numって何で&numなんですか?

188 名前:デフォルトの名無しさん mailto:sage [2011/12/23(金) 12:38:00.47 ]
numのアドレスでした
事故解決しました


189 名前:デフォルトの名無しさん mailto:sage [2011/12/23(金) 13:14:39.78 ]
>何をするのか知らなくてもいいようにそういう関数になってるんだけど
プロセス中で複数回呼ぶのはNGで、
プロセスが終了したら開放されるのであれば、
「WSACleanup()」しなくてもいいってことにならないのでしょうか?

もうひとつお願いします。
ソケットが使える常態かそうではないかはどのように確認できますか?
WSARecv()などで受信してみないとわからないでしょうか?

190 名前:デフォルトの名無しさん mailto:sage [2011/12/24(土) 07:15:28.99 ]
STLのstd::mapをprivateメンバとしてもつクラスをDLLの内部に持って、そのクラスをエクスポートすると、
Visual C++では、警告:C4251 が示されます。

privateとして利用している場合は、OKなのでしょうか、NGなのでしょうか。
インタフェースとして利用している場合は、std::mapの実装が異なる可能性があるのでNGというのは、なんとなくわかるのですが、
内部で利用するだけであれば問題がある理由がわからないです。
inlineを利用してアクセスするのがNGというのも良くわからないです。

この件では、ヘッダの内容を全てcpp側にコピーしても同じ警告が出ます。どうしてなのでしょうか?
コンパイラがインタフェースに利用されているか判断するのが困難だからでしょうか?

「class 'std::map<_Kty,_Ty>' は __export キーワードを使って class 'info::driver::InetPromiscuousDriver' にエクスポートしてください。」
とは、どこの何に対して、__exportを追記するとエクスポートできるのでしょうか?

エスパー出来れば、この辺りについて教えてください。



191 名前:デフォルトの名無しさん mailto:sage [2011/12/24(土) 08:48:18.60 ]
cat test.cpp | indent

で奇麗に整形されたソースになると思ったら
とんでもない壊れたものしか出力されない
何かオプションでもいるの?

192 名前:片山博文MZ ◆0lBZNi.Q7evd mailto:sage [2011/12/24(土) 10:22:48.99 ]
>>191
www.6809.net/tenk/html/lib/doc/astyle_j.htm

193 名前:デフォルトの名無しさん mailto:sage [2011/12/24(土) 17:43:03.67 ]
>>190
private メンバもクラスのサイズに影響する。
inline でアクセスしてたらDLL内外で実装の異なる map アクセスが展開される可能性がある。

194 名前:デフォルトの名無しさん mailto:sage [2011/12/24(土) 22:55:08.76 ]
int を全部doubleにおきかえたら不具合おきることなんてあるんだろうか
めんどくさくなってきたから全部doubleにしてしまいたい

195 名前:デフォルトの名無しさん mailto:sage [2011/12/24(土) 23:10:57.90 ]
>>194
>1/2*2
0
>1.0/2.0*2.0
1.000000

196 名前:デフォルトの名無しさん mailto:sage [2011/12/24(土) 23:20:24.96 ]
>>194
>めんどくさくなってきたから全部doubleにしてしまいたい

すれば?

余計面倒なことになると思うが。

197 名前:デフォルトの名無しさん mailto:sage [2011/12/25(日) 00:38:18.53 ]
インデックスがdoubleとかどこのうちの会社のソースだよ

198 名前:デフォルトの名無しさん mailto:sage [2011/12/25(日) 00:39:23.25 ]
Luaではよくある事

199 名前:デフォルトの名無しさん mailto:sage [2011/12/25(日) 00:44:23.33 ]
doubleででるかどうかはプログラム次第。
[]を小数点切り捨てとすると
[a/n + b/n]
[a/n] + [b/n]
は異なる。

200 名前:デフォルトの名無しさん mailto:sage [2011/12/25(日) 00:54:18.15 ]
>>199
世も末だなw



201 名前:デフォルトの名無しさん mailto:sage [2011/12/25(日) 02:57:13.99 ]
>>194
double i;
for(i=0;i<1;i+=0.01)printf("%f ",i);

int i;
for(i=0;i<100;i++)printf("%f ",(double)i/100.0);
とは違うことがある。



202 名前:デフォルトの名無しさん mailto:sage [2011/12/25(日) 03:48:17.30 ]
実数をループカウンタにすんなよ

203 名前:デフォルトの名無しさん mailto:sage [2011/12/25(日) 13:54:45.42 ]
intをdoubleに置き換えたので仕方がないです
実数でループできるように言語仕様を変えるべきでは?

204 名前:デフォルトの名無しさん mailto:sage [2011/12/25(日) 14:00:55.12 ]
実数でループできるが、計算の誤差が問題。

205 名前:デフォルトの名無しさん mailto:sage [2011/12/25(日) 14:06:30.24 ]
2進数で表記出来ないような数値を繰り返しで足し算したりするとどんどん誤差が増えるんだっけ

206 名前:デフォルトの名無しさん mailto:sage [2011/12/25(日) 14:24:16.46 ]
ループが一回多かったり少なくなったりする。
マシーンで計算精度が異なる。
整数型であればズレが出ない。

207 名前:デフォルトの名無しさん mailto:sage [2011/12/25(日) 15:16:35.68 ]
他の学問ならまだしもプログラミングって基本的に質問に向いてないよね

208 名前:デフォルトの名無しさん mailto:sage [2011/12/25(日) 18:36:46.52 ]
仕様上は数値である必要すらないけどな。

209 名前: ◆QZaw55cn4c mailto:sage [2011/12/25(日) 22:10:03.45 ]
>>207
コード・ソースを晒せば早いかもしれませんが、はじめのうちはなかなか勇気がでないかもしれません。

210 名前:デフォルトの名無しさん mailto:sage [2011/12/25(日) 23:20:09.77 ]
>>209
糞コードを晒す厚顔無恥さは勇気とは言わないけどな



211 名前: ◆QZaw55cn4c mailto:sage [2011/12/25(日) 23:23:41.70 ]
>>210
具体的に

212 名前:デフォルトの名無しさん mailto:sage [2011/12/25(日) 23:39:55.69 ]
自分で気付けない時点ですでに┐(´д`)┌ヤレヤレ

213 名前:デフォルトの名無しさん mailto:sage [2011/12/25(日) 23:44:05.64 ]
糞コードと馬鹿にするだけのカスは要らないのでスレから立ち去りなさい
糞コードを改善する答えやヒントを人に与えることができる人間以外は必要ありません

214 名前:デフォルトの名無しさん mailto:sage [2011/12/25(日) 23:56:37.99 ]
>>213はQがコテを外して書いた糞レス

215 名前:デフォルトの名無しさん mailto:sage [2011/12/26(月) 22:56:39.86 ]
7BITとか31BITみたいな中途半端な整数型って作れますか?

216 名前:デフォルトの名無しさん mailto:sage [2011/12/27(火) 00:10:20.44 ]
>>215
intと暗黙で相互変換可能なクラスを作ればそれですむ。
厳密な意味での整数型が作りたければコンパイラに手を入れる必要がある。

217 名前:デフォルトの名無しさん mailto:sage [2011/12/27(火) 00:59:27.39 ]
ビットフィールド

218 名前:デフォルトの名無しさん mailto:sage [2011/12/27(火) 11:09:05.80 ]
広いビット幅があれば制限すれば良い。
少ないビット幅しか使えないなら配列で多倍長数を表現する。
ハードウェアの対応でないから演算速度は落ちる。

219 名前:デフォルトの名無しさん mailto:sage [2011/12/27(火) 14:44:51.44 ]
// Hogeのインスタンスをたくさん作成
vector<auto_ptr<Hoge> > hoge_pointers(num, NULL);
for (int i = 0; i < num; i++) { hoge_pointers[i].reset(new Hoge); }

// pushするループで例外を投げたくないから、先行してhoge_userの内部にメモリを確保する
hoge_user.reserve(hoge_pointers.size());

// pushされた時点からポインタはhoge_userが管理する
for (int i = 0; i < num; i++) { hoge_user.push(hoge_pointers[i].release()); }

こんな感じで、hoge_userの外でHogeインスタンスをたくさん作成してから
hoge_userにポインタを渡したいんですが、どういう風にすればいいでしょうか

例外が起こった場合には、hoge_pointersがすべて解放されて、
hoge_userにpushされたポインタはすべてなかったことにしたいです

で、スマポを使おうと思ったのですが、auto_ptrはSTLのvectorに突っ込めなくて、
boost::shared_ptrはポインタを取り出すことができないのでやめました

try/catch 使えって話ですが、なにか他にいい解決策はありますか?

220 名前:デフォルトの名無しさん mailto:sage [2011/12/27(火) 15:20:55.13 ]
>>219
コンテナにauto_ptrを入れる行為はCOAPと呼ばれ厳禁

Effective STLを読め



221 名前:デフォルトの名無しさん mailto:sage [2011/12/27(火) 15:25:10.76 ]
その目的だとtry/catchで書くのが一番シンプルで楽だと思うよ

vector<Hoge *> v;
try {
 v.reserve(N);
 for(int i(0); i != N; ++i) {
  v.push_back(new Hoge);
 }

}
catch(...) {
 int n(v.size());
 for(int i(0); i != n; ++i) {
  delete v[i] ;
 }
throw ;
}

どうしてもtry/catchが嫌ならcatchブロックの部分をデストラクタで実行するクラスを作ってvのアドレスをもたせればいい

222 名前:デフォルトの名無しさん mailto:sage [2011/12/27(火) 15:59:34.02 ]
アドバイスありがとうございます
意地でもtry/catchを使いたくないので、そちらのコードを参考にしてクラスを自作したいと思います

223 名前:デフォルトの名無しさん mailto:sage [2011/12/27(火) 18:41:37.49 ]
構造体内で確保したリソースを削除するには?

public ref struct A {
array<int> a;
A() {
a = gcnew array<int>(10);
}
~A(){
delete a;
}
};


A^ s = gcnew A();
delete s;

で~A()が呼び出されて内部のリソースも削除される?

224 名前:デフォルトの名無しさん mailto:sage [2011/12/27(火) 19:09:14.58 ]
>>223
節子それC++やない、C++/CLIや

225 名前:デフォルトの名無しさん mailto:sage [2011/12/27(火) 19:32:32.67 ]
あ、ここc++/cliの質問は禁止?
すいません

226 名前:デフォルトの名無しさん mailto:sage [2011/12/27(火) 21:00:27.48 ]
別の言語だしな。C#の質問をするのと大して変わらんw
とりあえずスレ一覧をCLIで検索してみれ。

227 名前:デフォルトの名無しさん mailto:sage [2011/12/28(水) 00:12:20.49 ]
機種依存OKって事になってますので、こちらで質問させてもらいます。
プリミティブ型の値をvectorに大量に一括設定する際、vector::assign以上に高速に
設定する方法はないでしょうか?
VC++2010を使っています。

228 名前:227 mailto:sage [2011/12/28(水) 00:24:38.84 ]
すみません、もう1点。
vector等のSTLのコンテナを含む静的ライブラリ(型を限定してコンパイルした上で提供)を作成しているのですが、
Debug版の遅さに我慢できません(VC++2010)。
ライブラリのリリースでは内部実装がDebug版である必要はないため、
Debugビルド向けにもReleaseでビルドして提供したいと考えています。
しかし、イテレータデバッグレベルがどうのこうのっていうエラーが発生してしまいます。
なんとか回避する方法はないでしょうか?

229 名前:デフォルトの名無しさん mailto:sage [2011/12/28(水) 01:30:39.39 ]
>>227
たぶん無いね。あっても大差無いだろう。

>>228
_SECURE_SCL の設定で片付くんじゃないの?
msdn.microsoft.com/ja-jp/library/aa985965.aspx

あと、エラーメッセージは正確にね。

230 名前:227 mailto:sage [2011/12/28(水) 03:28:57.27 ]
>>229
ありがとうございます。

_SECURE_SCLについてはやってみましたが、プロジェクト全体で同じ値に設定しないとダメなようです。
Debugのプロジェクトは
 利用者側 ... デバッグ作業がしたいので_SECURE_SCL=1にしたい
 ライブラリ側 ... デバッグは済んでいて高速に処理したいので_SECURE_SCL=0にしたい
としたいのですが、下のLNK2038と同じエラーになってしいます。

> あと、エラーメッセージは正確にね。
申し訳ありません。
手元に環境がないため、ググッた結果になりますが、
 error LNK2038: '_ITERATOR_DEBUG_LEVEL' の不一致が検出されました。
だと思います。

自前のクラスを作って置き換えるか、より高速なSTLの実装があれば、それを使うというのもありなのかもしれませんが…。



231 名前:デフォルトの名無しさん mailto:sage [2011/12/28(水) 09:16:58.00 ]
リンク先を読んだならchecked_***はためしたんだろうか

232 名前:デフォルトの名無しさん mailto:sage [2011/12/28(水) 10:50:07.41 ]
デバッグ用はおそくていい。
速くしたければリリース使う。

233 名前:227 mailto:sage [2011/12/28(水) 21:10:53.96 ]
>>231
227に関しては早くなるかもしれませんね。
でも、今はなくなってしまったようです。
VC++2008のalgorithm
msdn.microsoft.com/en-us/library/chzkfc23%28v=VS.90%29.aspx
VC++2010のalgorithm
msdn.microsoft.com/en-us/library/chzkfc23%28v=VS.100%29.aspx
make_checked_iteratorは残っていますが、これを使ってstd::copyしても、内部で
 _DEBUG_RANGE
_DEBUG_POINTER
が呼ばれた後、ようやくコピー処理が走るようになってるようです。

>>232
それが、我慢出来ないくらい遅いんですよ。
ソースコードデバッグを開始すると数分反応が帰って来ませんし。

234 名前:デフォルトの名無しさん mailto:sage [2011/12/28(水) 21:15:11.47 ]
[]じゃなくてatを使っているとか
そういうのじゃないよね?

235 名前:デフォルトの名無しさん mailto:sage [2011/12/28(水) 21:27:54.73 ]
とりあえずreserve()してからだとどうなるか知りたいね

236 名前:デフォルトの名無しさん mailto:sage [2011/12/28(水) 21:29:53.57 ]
>>234
SECURE_SCLのせいでatも[]も変わらなくなってるよ
最初に気がついたときは怒りで発狂するかと思ったw

ありなしでDLLまたげないしね
ほんと面倒だわ

>>233
うちもけっこうでかいプログラム作ってるけどSECUrE_SCLをOFFにしてDebug版は素直に使ってる
ただ、デバッグ実行じゃなくてexeを直に叩いて立ち上げてからアタッチしたほうが
結構速い気がするのでそっちを使ってる


237 名前:227 mailto:sage [2011/12/28(水) 21:30:32.33 ]
>>234
atは使ってませんね。[]です。

238 名前:227 mailto:sage [2011/12/28(水) 21:45:42.75 ]
>>235
reserveして設定も試しています。
[]で設定する他、生ポインタに変換して設定したり、OpenMPを使ってみたりしてみましたが…、
assignの方が早かったです。
どうも、reserveも要素ごとに配置newが発生したり、_DEBUG_RANGEなどが走ったりしているようで、
値の設定分、遅くなってしまうようです。

>>236
立ち上がってアタッチってのはたしかに有用かもしれませんね。
ありがとうございます。


239 名前:デフォルトの名無しさん mailto:sage [2011/12/28(水) 21:52:35.70 ]
どんな操作なのかソース出したほうがいいんじゃないかと思う

240 名前:227 mailto:sage [2011/12/28(水) 23:13:13.60 ]
>>239
ソースは手元に無いので、覚えている範囲で似たようなコードを書きました。
あと、うちにあるのはExpressなので、OpenMPが動くかどうかは不明です。
codepad.org/kqZndGzg
ちなみに >>238 はreserveではなくて、resizeでした。
申し訳ありません。
reserveも試してはいますが、assignの方が早かったと思います。




241 名前:デフォルトの名無しさん mailto:sage [2011/12/29(木) 01:07:24.97 ]
forじゃなくてfor_eachを使うと少しはましになるかもしれないなあとか
この際だからmemcpyでいいんじゃねというくらいしかまともな方法は思いつかない

boost::container::vectorとか使って望む結果になるかどうかも試したことないからわからないな

242 名前:デフォルトの名無しさん mailto:sage [2011/12/29(木) 04:03:07.90 ]
void function (char *arg);
という関数に渡された引数が &hoge[1]だった場合、
関数の中ではhoge[0]はarg[-1]という表現でいいんですか?

243 名前:227 mailto:sage [2011/12/29(木) 06:52:19.95 ]
>>241
へえ、boostにもvectorがあるんですね。
これは、試してみたいですね。
ありがとうございます。

244 名前:デフォルトの名無しさん mailto:sage [2011/12/29(木) 08:20:41.31 ]
boostには変なコンテナがたくさんあるよ

Header <boost/container/container_fwd.hpp>
Header <boost/container/deque.hpp>
Header <boost/container/flat_map.hpp>
Header <boost/container/flat_set.hpp>
Header <boost/container/list.hpp>
Header <boost/container/map.hpp>
Header <boost/container/set.hpp>
Header <boost/container/slist.hpp>
Header <boost/container/stable_vector.hpp>
Header <boost/container/string.hpp>
Header <boost/container/vector.hpp>

ひと通りどんな内容なのか目を通しておくとよい
boostは今や膨大な内容になっていてとても全部目を通すのは不可能に
近くなってきたから興味のある所だけでも見ておこう

245 名前:デフォルトの名無しさん mailto:sage [2011/12/29(木) 08:29:02.28 ]
boostはいらん。
これ使うやつはアホウだ。

246 名前:デフォルトの名無しさん mailto:sage [2011/12/29(木) 08:31:19.60 ]
timerとか正規表現とかスマートポインタあたりで使うやつがいるが。
有名なライブラリがあったりtimerなど3行程度で自作できるだろ。
バージョン違いで動作が変わる可能性あるし、インクルードするやつはアホウ。

247 名前:デフォルトの名無しさん mailto:sage [2011/12/29(木) 08:37:09.53 ]
バイナリの配布で中身にboost使うなら良い。boostのバージョンに依存しないからな。
ソースコードを張ったり公開するところでboostはダメだな。

248 名前:デフォルトの名無しさん mailto:sage [2011/12/29(木) 11:24:02.76 ]
0xが普及したらboostとか要らなくなる

249 名前:デフォルトの名無しさん mailto:sage [2011/12/29(木) 13:11:43.53 ]
スマートポインタなんて使う必要ないと思うんだが。
STLを使っとけばスコープ外れたら自動で解放するだろ。
どうやってnewの使用が回避出来なかったら手動で開放しろよ。
もしくはデストラクタに組み込めよ。そしたらいらん。

250 名前:デフォルトの名無しさん mailto:sage [2011/12/29(木) 13:59:55.29 ]
>>245-246はアホウ
使ってもみないでただ批判ばかりしてる



251 名前:デフォルトの名無しさん mailto:sage [2011/12/29(木) 14:33:10.27 ]
>>249
>デストラクタに組み込めよ
これを毎回書くのがだるいからスマポ使うんだろ

252 名前:デフォルトの名無しさん mailto:sage [2011/12/29(木) 14:33:12.78 ]
つかってみて言ってるんだ。
boostが優れている所なんてないだろ。
使う意味なし。






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

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

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