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

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

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

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

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

【アップローダー】(質問が長い時はココ使うと便利)
http://codepad.org/ (コンパイルもできるし出力結果も得られる[]privateをチェック)
http://ideone.com/ (時間帯によってはcodepadが重い事があるのでここも利用)
0153デフォルトの名無しさん2011/12/20(火) 23:40:38.22
>>152
ONE.value, ONE.name
0154デフォルトの名無しさん2011/12/21(水) 01:24:23.57
>>147
inline 関数は定義がいっぱいあってもその内容が完全に同じならおk
0155デフォルトの名無しさん2011/12/21(水) 01:28:28.64
>>148
こんな感じでがんばれ。
http://d.hatena.ne.jp/Cryolite/20110920#p1
0156デフォルトの名無しさん2011/12/21(水) 02:27:39.19
おねがいします。
引数が SIZEの関数があったので
func(SIZE(CX,CY));
と記述したらエラーとなりました。
SIZE size={CX,CY};
func(size); とするとOKでした。
変数を作らずに関数に値を渡すにはどう記述すればいいのでしょうか。
0157デフォルトの名無しさん2011/12/21(水) 02:31:33.13
>>156
コンパイラがC99またはC++11対応ならSIZE{CX,CY}でいけるんじゃないかな。
0158デフォルトの名無しさん2011/12/21(水) 03:42:27.32
>>153
ありがとう。動作しました。
こんな文法があるとは。

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

>>149の原理が分かってないので、応用できないというか…
なにか参考URLはないでしょうか
構造体でググっても見つかりません…
01592011新作展示2011/12/21(水) 03:44:15.42
2011新作展示
N級最高等級時計大量入荷
新品種類がそろっています。
http://baidurl.cn/4ye
http://baidurl.cn/555
http://baidurl.cn/556
http://baidurl.cn/557
http://baidurl.cn/559
01601442011/12/21(水) 06:52:08.37
>>151
ありがとう
0161デフォルトの名無しさん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;
}
0162デフォルトの名無しさん2011/12/21(水) 23:11:15.45

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


国民に罵声を浴びせられ駅前交番に避難するテレビアカヒの取材班 12/19正午 新橋駅前 
http://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     http://livedoor.blogimg.jp/kingcurtis/imgs/e/d/ed2dbc66.jpg 
0163デフォルトの名無しさん2011/12/22(木) 06:29:56.60
class A{
 int hoge(){}
}
と書いてもコンパイルエラーにならないが、
class A{
 int hoge();
}
int A::hoge(){}
と書くと、「値を返さなければいけません」のようなコンパイルエラーになるのは何故ですか?
両者は同じではないですか?
0164デフォルトの名無しさん2011/12/22(木) 06:37:16.94
ttp://codepad.org/NM2qcsIg
文句言われるけど
01651632011/12/22(木) 07:40:15.39
>>164
ありがとうございます。
気になったらとりあえずcodepadに行ってみるのがいい感じですね。

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

警告に対する設定の違い見たいですね。。。
0166デフォルトの名無しさん2011/12/22(木) 07:41:49.56
前者は呼ばれない関数だからだろ。呼べばエラーになるよ。
0167デフォルトの名無しさん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を書く以外の方法があれば教えて欲しいです。
0168デフォルトの名無しさん2011/12/22(木) 07:50:39.96
#define private public
0169デフォルトの名無しさん2011/12/22(木) 08:48:37.01
名前の違う、自由に改変可能な、同じ内容のクラスを作って
対象のクラスのポインタをそのクラスのポインタにキャストする
01701672011/12/22(木) 09:41:48.72
>#define private public
これは…。
恐ろしいものを知りました。

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

おふたかた、ありがとうございます。
因みに、プロの方ですか?現場でもこういったことをするのですか?
0171デフォルトの名無しさん2011/12/22(木) 09:43:46.66
>前者は呼ばれない関数だからだろ。呼べばエラーになるよ。
!
呼ばれなければコンパイルされないのか…。
ありがとうございます。
0172デフォルトの名無しさん2011/12/22(木) 09:47:35.11
呼ばれない関数でも普通はコンパイルされるよ。
0173デフォルトの名無しさん2011/12/22(木) 10:47:13.94
>>168
背筋が凍った
0174デフォルトの名無しさん2011/12/22(木) 11:56:21.38
実際>>168がまかり通ってるような現場ってあるの?
0175デフォルトの名無しさん2011/12/22(木) 12:18:10.65
クラスにfriendを追加したりする変更権限のある人が
テストをした方が良いと思うんだが。
0176デフォルトの名無しさん2011/12/22(木) 14:39:19.81
>>171-172
呼ばれないメンバ関数をコンパイルしない代表は、VC++。
他人が使うクラスを作るときは要注意。
0177デフォルトの名無しさん2011/12/22(木) 16:14:40.38
>>176
実例よろ
0178デフォルトの名無しさん2011/12/22(木) 16:31:36.66
>>163
前者はインライン関数。
インライン関数は一部は一部文法チェックされるようだけど、
呼ばれなければ、returnがなくても怒られないね。
バイナリには含まれないから問題ない。

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

よって両者は異なる。
0179デフォルトの名無しさん2011/12/22(木) 22:37:11.15
ひどいコンパイラだ…
0180デフォルトの名無しさん2011/12/22(木) 22:46:22.31
当然の処置だと思うがね。
インライン関数のマージ作業に意味解析済みである必要は無いというかそもそも無駄なんだから
0181デフォルトの名無しさん2011/12/22(木) 22:54:10.81
そうかなぁ…
リリースモードならともかく、デバッグモードではちゃんとコンパイルエラーを出して欲しい。
DEFCON^h^h^h^h^h^h警告レベル4でもでなのかしら? …実験してみるかな。
0182デフォルトの名無しさん2011/12/22(木) 23:02:13.29
未使用だと言うなら警告してくれてもいいとすら思う。
0183デフォルトの名無しさん2011/12/22(木) 23:53:24.85
>前者はインライン関数。
なんと!
クラス宣言の中に書いてしまうとインライン扱いになるということ?

警告してくれるようなオプションってないのかな?
後で邪魔になっても困る人もいるのでは?
0184デフォルトの名無しさん2011/12/23(金) 01:09:32.25
震災前

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


震災後

     |:::::::::/            |ミ|
     |::::::::|   ,,,,,    ,,,,,   |ミ|
     |彡|.  '''"""''   ''"""'' |/
     /⌒|  -=・=‐,   =・=-  |
     | (    "''''"   | "''''"  |  
     .ヽ,,         ヽ    .|  キリッ
        |       ^-^    |
   .     |     ‐-===-   |   大震災が起こったのだからマニフェストの破綻も致し方ありません
         ,\.    "'''''''"   / 
朝鮮民主党
    解党
0185デフォルトの名無しさん2011/12/23(金) 08:52:29.38
WIN32のAPIのwinsockの関数、「WSACleanup()」というのは、何をする関数なのでしょうか?

「WSAStartup()」と対になって、
初期化・開放 のようなものかと思っていたのですが、
調べてみると、
「WSAStartup()」はメモリを取得するが、
「WSACleanup()」をしても開放しないので、そのうちヒープか何かが無くなって落ちると知りました。
0186デフォルトの名無しさん2011/12/23(金) 09:00:06.22
何をするのか知らなくてもいいようにそういう関数になってるんだけど
0187デフォルトの名無しさん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なんですか?
0188デフォルトの名無しさん2011/12/23(金) 12:38:00.47
numのアドレスでした
事故解決しました
0189デフォルトの名無しさん2011/12/23(金) 13:14:39.78
>何をするのか知らなくてもいいようにそういう関数になってるんだけど
プロセス中で複数回呼ぶのはNGで、
プロセスが終了したら開放されるのであれば、
「WSACleanup()」しなくてもいいってことにならないのでしょうか?

もうひとつお願いします。
ソケットが使える常態かそうではないかはどのように確認できますか?
WSARecv()などで受信してみないとわからないでしょうか?
0190デフォルトの名無しさん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を追記するとエクスポートできるのでしょうか?

エスパー出来れば、この辺りについて教えてください。
0191デフォルトの名無しさん2011/12/24(土) 08:48:18.60
cat test.cpp | indent

で奇麗に整形されたソースになると思ったら
とんでもない壊れたものしか出力されない
何かオプションでもいるの?
0192片山博文MZ ◆0lBZNi.Q7evd 2011/12/24(土) 10:22:48.99
>>191
http://www.6809.net/tenk/html/lib/doc/astyle_j.htm
0193デフォルトの名無しさん2011/12/24(土) 17:43:03.67
>>190
private メンバもクラスのサイズに影響する。
inline でアクセスしてたらDLL内外で実装の異なる map アクセスが展開される可能性がある。
0194デフォルトの名無しさん2011/12/24(土) 22:55:08.76
int を全部doubleにおきかえたら不具合おきることなんてあるんだろうか
めんどくさくなってきたから全部doubleにしてしまいたい
0195デフォルトの名無しさん2011/12/24(土) 23:10:57.90
>>194
>1/2*2
0
>1.0/2.0*2.0
1.000000
0196デフォルトの名無しさん2011/12/24(土) 23:20:24.96
>>194
>めんどくさくなってきたから全部doubleにしてしまいたい

すれば?

余計面倒なことになると思うが。
0197デフォルトの名無しさん2011/12/25(日) 00:38:18.53
インデックスがdoubleとかどこのうちの会社のソースだよ
0198デフォルトの名無しさん2011/12/25(日) 00:39:23.25
Luaではよくある事
0199デフォルトの名無しさん2011/12/25(日) 00:44:23.33
doubleででるかどうかはプログラム次第。
[]を小数点切り捨てとすると
[a/n + b/n]
[a/n] + [b/n]
は異なる。
0200デフォルトの名無しさん2011/12/25(日) 00:54:18.15
>>199
世も末だなw
0201デフォルトの名無しさん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);
とは違うことがある。

0202デフォルトの名無しさん2011/12/25(日) 03:48:17.30
実数をループカウンタにすんなよ
0203デフォルトの名無しさん2011/12/25(日) 13:54:45.42
intをdoubleに置き換えたので仕方がないです
実数でループできるように言語仕様を変えるべきでは?
0204デフォルトの名無しさん2011/12/25(日) 14:00:55.12
実数でループできるが、計算の誤差が問題。
0205デフォルトの名無しさん2011/12/25(日) 14:06:30.24
2進数で表記出来ないような数値を繰り返しで足し算したりするとどんどん誤差が増えるんだっけ
0206デフォルトの名無しさん2011/12/25(日) 14:24:16.46
ループが一回多かったり少なくなったりする。
マシーンで計算精度が異なる。
整数型であればズレが出ない。
0207デフォルトの名無しさん2011/12/25(日) 15:16:35.68
他の学問ならまだしもプログラミングって基本的に質問に向いてないよね
0208デフォルトの名無しさん2011/12/25(日) 18:36:46.52
仕様上は数値である必要すらないけどな。
0209 ◆QZaw55cn4c 2011/12/25(日) 22:10:03.45
>>207
コード・ソースを晒せば早いかもしれませんが、はじめのうちはなかなか勇気がでないかもしれません。
0210デフォルトの名無しさん2011/12/25(日) 23:20:09.77
>>209
糞コードを晒す厚顔無恥さは勇気とは言わないけどな
0211 ◆QZaw55cn4c 2011/12/25(日) 23:23:41.70
>>210
具体的に
0212デフォルトの名無しさん2011/12/25(日) 23:39:55.69
自分で気付けない時点ですでに┐(´д`)┌ヤレヤレ
0213デフォルトの名無しさん2011/12/25(日) 23:44:05.64
糞コードと馬鹿にするだけのカスは要らないのでスレから立ち去りなさい
糞コードを改善する答えやヒントを人に与えることができる人間以外は必要ありません
0214デフォルトの名無しさん2011/12/25(日) 23:56:37.99
>>213はQがコテを外して書いた糞レス
0215デフォルトの名無しさん2011/12/26(月) 22:56:39.86
7BITとか31BITみたいな中途半端な整数型って作れますか?
0216デフォルトの名無しさん2011/12/27(火) 00:10:20.44
>>215
intと暗黙で相互変換可能なクラスを作ればそれですむ。
厳密な意味での整数型が作りたければコンパイラに手を入れる必要がある。
0217デフォルトの名無しさん2011/12/27(火) 00:59:27.39
ビットフィールド
0218デフォルトの名無しさん2011/12/27(火) 11:09:05.80
広いビット幅があれば制限すれば良い。
少ないビット幅しか使えないなら配列で多倍長数を表現する。
ハードウェアの対応でないから演算速度は落ちる。
0219デフォルトの名無しさん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 使えって話ですが、なにか他にいい解決策はありますか?
0220デフォルトの名無しさん2011/12/27(火) 15:20:55.13
>>219
コンテナにauto_ptrを入れる行為はCOAPと呼ばれ厳禁

Effective STLを読め
0221デフォルトの名無しさん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のアドレスをもたせればいい
0222デフォルトの名無しさん2011/12/27(火) 15:59:34.02
アドバイスありがとうございます
意地でもtry/catchを使いたくないので、そちらのコードを参考にしてクラスを自作したいと思います
0223デフォルトの名無しさん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()が呼び出されて内部のリソースも削除される?
0224デフォルトの名無しさん2011/12/27(火) 19:09:14.58
>>223
節子それC++やない、C++/CLIや
0225デフォルトの名無しさん2011/12/27(火) 19:32:32.67
あ、ここc++/cliの質問は禁止?
すいません
0226デフォルトの名無しさん2011/12/27(火) 21:00:27.48
別の言語だしな。C#の質問をするのと大して変わらんw
とりあえずスレ一覧をCLIで検索してみれ。
0227デフォルトの名無しさん2011/12/28(水) 00:12:20.49
機種依存OKって事になってますので、こちらで質問させてもらいます。
プリミティブ型の値をvectorに大量に一括設定する際、vector::assign以上に高速に
設定する方法はないでしょうか?
VC++2010を使っています。
02282272011/12/28(水) 00:24:38.84
すみません、もう1点。
vector等のSTLのコンテナを含む静的ライブラリ(型を限定してコンパイルした上で提供)を作成しているのですが、
Debug版の遅さに我慢できません(VC++2010)。
ライブラリのリリースでは内部実装がDebug版である必要はないため、
Debugビルド向けにもReleaseでビルドして提供したいと考えています。
しかし、イテレータデバッグレベルがどうのこうのっていうエラーが発生してしまいます。
なんとか回避する方法はないでしょうか?
0229デフォルトの名無しさん2011/12/28(水) 01:30:39.39
>>227
たぶん無いね。あっても大差無いだろう。

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

あと、エラーメッセージは正確にね。
02302272011/12/28(水) 03:28:57.27
>>229
ありがとうございます。

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

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

自前のクラスを作って置き換えるか、より高速なSTLの実装があれば、それを使うというのもありなのかもしれませんが…。
0231デフォルトの名無しさん2011/12/28(水) 09:16:58.00
リンク先を読んだならchecked_***はためしたんだろうか
0232デフォルトの名無しさん2011/12/28(水) 10:50:07.41
デバッグ用はおそくていい。
速くしたければリリース使う。
02332272011/12/28(水) 21:10:53.96
>>231
227に関しては早くなるかもしれませんね。
でも、今はなくなってしまったようです。
VC++2008のalgorithm
http://msdn.microsoft.com/en-us/library/chzkfc23%28v=VS.90%29.aspx
VC++2010のalgorithm
http://msdn.microsoft.com/en-us/library/chzkfc23%28v=VS.100%29.aspx
make_checked_iteratorは残っていますが、これを使ってstd::copyしても、内部で
 _DEBUG_RANGE
_DEBUG_POINTER
が呼ばれた後、ようやくコピー処理が走るようになってるようです。

>>232
それが、我慢出来ないくらい遅いんですよ。
ソースコードデバッグを開始すると数分反応が帰って来ませんし。
0234デフォルトの名無しさん2011/12/28(水) 21:15:11.47
[]じゃなくてatを使っているとか
そういうのじゃないよね?
0235デフォルトの名無しさん2011/12/28(水) 21:27:54.73
とりあえずreserve()してからだとどうなるか知りたいね
0236デフォルトの名無しさん2011/12/28(水) 21:29:53.57
>>234
SECURE_SCLのせいでatも[]も変わらなくなってるよ
最初に気がついたときは怒りで発狂するかと思ったw

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

>>233
うちもけっこうでかいプログラム作ってるけどSECUrE_SCLをOFFにしてDebug版は素直に使ってる
ただ、デバッグ実行じゃなくてexeを直に叩いて立ち上げてからアタッチしたほうが
結構速い気がするのでそっちを使ってる
02372272011/12/28(水) 21:30:32.33
>>234
atは使ってませんね。[]です。
02382272011/12/28(水) 21:45:42.75
>>235
reserveして設定も試しています。
[]で設定する他、生ポインタに変換して設定したり、OpenMPを使ってみたりしてみましたが…、
assignの方が早かったです。
どうも、reserveも要素ごとに配置newが発生したり、_DEBUG_RANGEなどが走ったりしているようで、
値の設定分、遅くなってしまうようです。

>>236
立ち上がってアタッチってのはたしかに有用かもしれませんね。
ありがとうございます。
0239デフォルトの名無しさん2011/12/28(水) 21:52:35.70
どんな操作なのかソース出したほうがいいんじゃないかと思う
02402272011/12/28(水) 23:13:13.60
>>239
ソースは手元に無いので、覚えている範囲で似たようなコードを書きました。
あと、うちにあるのはExpressなので、OpenMPが動くかどうかは不明です。
http://codepad.org/kqZndGzg
ちなみに >>238 はreserveではなくて、resizeでした。
申し訳ありません。
reserveも試してはいますが、assignの方が早かったと思います。
0241デフォルトの名無しさん2011/12/29(木) 01:07:24.97
forじゃなくてfor_eachを使うと少しはましになるかもしれないなあとか
この際だからmemcpyでいいんじゃねというくらいしかまともな方法は思いつかない

boost::container::vectorとか使って望む結果になるかどうかも試したことないからわからないな
0242デフォルトの名無しさん2011/12/29(木) 04:03:07.90
void function (char *arg);
という関数に渡された引数が &hoge[1]だった場合、
関数の中ではhoge[0]はarg[-1]という表現でいいんですか?
02432272011/12/29(木) 06:52:19.95
>>241
へえ、boostにもvectorがあるんですね。
これは、試してみたいですね。
ありがとうございます。
0244デフォルトの名無しさん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は今や膨大な内容になっていてとても全部目を通すのは不可能に
近くなってきたから興味のある所だけでも見ておこう
0245デフォルトの名無しさん2011/12/29(木) 08:29:02.28
boostはいらん。
これ使うやつはアホウだ。
0246デフォルトの名無しさん2011/12/29(木) 08:31:19.60
timerとか正規表現とかスマートポインタあたりで使うやつがいるが。
有名なライブラリがあったりtimerなど3行程度で自作できるだろ。
バージョン違いで動作が変わる可能性あるし、インクルードするやつはアホウ。
0247デフォルトの名無しさん2011/12/29(木) 08:37:09.53
バイナリの配布で中身にboost使うなら良い。boostのバージョンに依存しないからな。
ソースコードを張ったり公開するところでboostはダメだな。
0248デフォルトの名無しさん2011/12/29(木) 11:24:02.76
0xが普及したらboostとか要らなくなる
0249デフォルトの名無しさん2011/12/29(木) 13:11:43.53
スマートポインタなんて使う必要ないと思うんだが。
STLを使っとけばスコープ外れたら自動で解放するだろ。
どうやってnewの使用が回避出来なかったら手動で開放しろよ。
もしくはデストラクタに組み込めよ。そしたらいらん。
0250デフォルトの名無しさん2011/12/29(木) 13:59:55.29
>>245-246はアホウ
使ってもみないでただ批判ばかりしてる
0251デフォルトの名無しさん2011/12/29(木) 14:33:10.27
>>249
>デストラクタに組み込めよ
これを毎回書くのがだるいからスマポ使うんだろ
0252デフォルトの名無しさん2011/12/29(木) 14:33:12.78
つかってみて言ってるんだ。
boostが優れている所なんてないだろ。
使う意味なし。
■ このスレッドは過去ログ倉庫に格納されています