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


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

【C++】STL(Standard Template Library)相談室 11



1 名前:デフォルトの名無しさん [2009/01/11(日) 11:13:44 ]
C++標準ライブラリの一つ、STLについて。

前スレ
【C++】STL(Standard Template Library)相談室 10
pc11.2ch.net/test/read.cgi/tech/1219719677/

過去ログ・リンク・書籍紹介は >>2 以降

14 名前:デフォルトの名無しさん mailto:sage [2009/01/12(月) 03:17:22 ]
空のコンテナってbegin()==end()になるんじゃないの?無効なの?

15 名前:デフォルトの名無しさん mailto:sage [2009/01/12(月) 04:55:50 ]
>>14
>>7

16 名前:デフォルトの名無しさん mailto:sage [2009/01/12(月) 11:14:16 ]
>>14
それであってる。イテレータ自体は有効だけど、デリファレンス(要素にアクセス)はできない。

17 名前:デフォルトの名無しさん mailto:sage [2009/01/15(木) 00:25:09 ]
どうしてもイテレータの良さが分からない
vectorとかdequeとかならat()でfor文回せばいいじゃん
一個変数増えるし、洗練された手法には見えない

だれか、熱く語ってくれないか


18 名前:デフォルトの名無しさん mailto:sage [2009/01/15(木) 00:47:37 ]
・全てのコンテナにat()が実装されているとは限らない。
・全てのコンテナにoperator []()が実装されているとは限らない。
・全てのコンテナにイテレータが実装されている。
・全てのコンテナに対応したアルゴリズムを組む時に使える。
・別に使いたくなければ使わなくても良いけど。

19 名前:デフォルトの名無しさん mailto:sage [2009/01/15(木) 00:53:04 ]
どっかのAPIからデータの集まりを「TheContainer」なるクラスで貰ってきたとしよう
君はそれを調べ上げて、めでたくその実体がvectorに過ぎないことを突き止め
中からatを引っ張り出してforループを書き各データに望みの処理を施した
ここまでは万々歳だ

ところがそのAPIのバージョンが上がって、TheContainerの実体はfantasticsetという
ベンダがオリジナルで作り上げた超高性能で複雑怪奇なコンテナに変わった
君は互換性を保つために、fantasticsetの構造を調べ上げて、
各データに順次アクセスするためのカオスな繰り返し文を書いて、
それが正しく全データを重複なく渡っているかどうかのテストもしなければならなくなった

最初からTheContainer::iteratorを使ってループしてれば、こんな苦労をせずに済んだんだ
どうだ素晴らしいだろう

20 名前:デフォルトの名無しさん mailto:sage [2009/01/15(木) 01:22:20 ]
>>17
listはどうするんだね?

21 名前:デフォルトの名無しさん mailto:sage [2009/01/15(木) 03:34:54 ]
>>17
>一個変数増える
ここkwsk

22 名前:デフォルトの名無しさん mailto:sage [2009/01/15(木) 03:40:44 ]
>>21
俺も気になっている。
atや[]でもiが要るから互角だと思う。



23 名前:デフォルトの名無しさん mailto:sage [2009/01/15(木) 03:54:50 ]
連結リストはランダムアクセス時に後方要素を検索するのに時間がかかるけど、
内部にさらにリストを使ったりして10000個とかジャンプさせればかなり安定すると
思うけどな。

ちょっと自分で作って比較検証してみるか……

24 名前:デフォルトの名無しさん mailto:sage [2009/01/15(木) 04:23:02 ]
追加削除どうなるんだよという気がするけど

25 名前:デフォルトの名無しさん mailto:sage [2009/01/15(木) 07:18:45 ]
end のこと言ってるんだろうが
配列でもサイズが必要になるな。

26 名前:デフォルトの名無しさん mailto:sage [2009/01/15(木) 12:10:37 ]
>>23
それはスキップリストっていうデータ構造
結構古典的なデータ構造だから検証しなくても大体O(log N)になるよ

27 名前:17 mailto:sage [2009/01/15(木) 20:34:43 ]
>>18-22
抽象性が高い、と。速いとか、即役に立つというものでもないのね。

ちなみに、カウンタは変数に入りません、というイメージだった。
イテレータも宣言しだいでカウンタと同じように扱えるね。ちょっとforが長くなるけど。

なんとなく使ってみる気になった。

28 名前:デフォルトの名無しさん mailto:sage [2009/01/16(金) 01:06:19 ]
>抽象性が高い、と。速いとか、即役に立つというものでもないのね。
……釣りだよね?

29 名前:デフォルトの名無しさん mailto:sage [2009/01/16(金) 11:19:44 ]
抽象度が高い事が即役に立つ事もある。

30 名前:デフォルトの名無しさん mailto:sage [2009/01/18(日) 02:44:58 ]
配列こそもはや使う気にならない。
イテレータがなくてもvectorやlistを使う。

31 名前:デフォルトの名無しさん mailto:sage [2009/01/18(日) 02:53:09 ]
固定長で大量に使う場合はまだ配列を使うなぁ
それ以外はほとんどvectorだけど

32 名前:デフォルトの名無しさん mailto:sage [2009/01/18(日) 02:59:43 ]
boost::beginとendがあれば、もう配列も恐くない。
これでBoost/TR1のarrayももう役目を終えた。



33 名前:デフォルトの名無しさん mailto:sage [2009/01/18(日) 03:01:39 ]
vector は早く data() を実装してくれ。

34 名前:デフォルトの名無しさん mailto:sage [2009/01/18(日) 11:19:06 ]
初歩的な質問で恐縮ですが関数テンプレートにてコンテナの第3要素を返す場合、
どのように記述したらよろしいでしょうか?

template <typename T>
T get3rd(const T& container){
if( container.size > 3 )
return container.end();
typename T::iterator it = container.begin();
std::advance(it,2);
return it;
}

std::vector<int> ivec(10,255);
std::vector<int>::iterator it = get3rd(ivec);

こうすると
'std::vector<_Ty>' から 'std::_Vector_iterator<_Ty,_Alloc>' に変換できません
とエラーになってしまいます

35 名前:デフォルトの名無しさん mailto:sage [2009/01/18(日) 11:22:46 ]
戻り値型Tがコンテナ型なのにイテレータに入れようとしてる

36 名前:デフォルトの名無しさん mailto:sage [2009/01/18(日) 11:26:56 ]
ヒャッハーーーーッ!!!!!
戻り値を typename T::const_iterator にして
iterator 部分を const_iterator にしたら解決しました。
関数の引数にconst T& としたので、普通のiterator は使えないのも見落としてました。
ありがとうございました。

37 名前:デフォルトの名無しさん mailto:sage [2009/01/18(日) 12:09:50 ]
こんなやり方もある

template< template<typename, typename = std::allocator> class T, class V, class A>
typename T<V,A>::const_iterator Get3rdValue(const T<V,A>& cont)
{
typename T<V,A>::const_iterator it = cont.begin();
std::advance(it, 2);
return it;
}

使い方
Get3rdValue<std::vector>(vi);

38 名前:デフォルトの名無しさん mailto:sage [2009/01/23(金) 08:16:30 ]
vectorやdequeで v.insert(v.end()+n,x); (n>0) とv.end() を
越えた位置を指定して挿入した場合の動作は、未定義でしょうか?
解説サイトを数件見ているのですが、記述が見つからないものでして。

39 名前:デフォルトの名無しさん [2009/01/23(金) 08:32:12 ]
>>38
23.2.4.3

Notes: Causes reallocation if the new size is greater than the old capacity. If no reallocation happens, all
the iterators and references before the insertion point remain valid. If an exception is thrown other than
by the copy constructor or assignment operator of T there are no effects.

2 Complexity: If first and last are forward iterators, bidirectional iterators, or random access iterators,
the complexity is linear in the number of elements in the range [first, last) plus the distance to
the end of the vector. If they are input iterators, the complexity is proportional to the number of elements
in the range [first, last) times the distance to the end of the vector.

40 名前:デフォルトの名無しさん mailto:sage [2009/01/23(金) 08:39:32 ]


41 名前:デフォルトの名無しさん [2009/01/23(金) 09:03:13 ]
>>38 >>40

範囲外の反復子に対しての参照外しができないから、何が起こっても文句は言えん

42 名前:デフォルトの名無しさん mailto:sage [2009/01/23(金) 09:16:24 ]
>>41
なるほど要素を指してない無効な反復子を渡すのは、当然駄目ということですね。
ありがとうございます!



43 名前:デフォルトの名無しさん mailto:sage [2009/01/23(金) 11:00:26 ]
>>42
insert() 以前に、デリファレンスできないイテレータを前に進めた時点で未定義だよ。

44 名前:デフォルトの名無しさん mailto:sage [2009/01/23(金) 11:52:50 ]
insert(end,x) も未定義なの?

45 名前:デフォルトの名無しさん mailto:sage [2009/01/23(金) 11:55:39 ]
>>44
end() より先に進めてなければ最後に追加されるだけ。

46 名前:デフォルトの名無しさん mailto:sage [2009/01/23(金) 12:02:27 ]
>>41-42 読んでend()はデリファレンスできないから
許されていないのかと思った

47 名前:デフォルトの名無しさん [2009/01/23(金) 12:06:21 ]
>>45
アクセス違反になるが・・

48 名前:デフォルトの名無しさん [2009/01/23(金) 12:12:42 ]
>>45
gcc-4.3.2(mingw)
追加されないですよ。

std::vector<int> v;
std::vector<int>::iterator s;
std::vector<int>::iterator e;

v.push_back(0);
s = v.begin();
e = v.end();
std::cout << "before :";
while(s != e)
{
std::cout << *s << "\n";
s++;
}

v.insert(v.end() + 1, 10);
s = v.begin();
e = v.end();
std::cout << "after :";
while(s != e)
{
std::cout << *s << "\n";
s++;
}

49 名前:デフォルトの名無しさん mailto:sage [2009/01/23(金) 12:18:45 ]
>>45
endはsize() < max_size()内の有効な反復子でなければならない

50 名前:45(=43) mailto:sage [2009/01/23(金) 12:20:09 ]
>>46-49
「end() より先に進めてなければ」と書いといたのに。
> v.insert(v.end() + 1, 10);

51 名前:デフォルトの名無しさん [2009/01/23(金) 12:21:38 ]
>>50
すまん

52 名前:デフォルトの名無しさん mailto:sage [2009/01/23(金) 12:23:08 ]
流れ的に不安だから、念のためまとめとこう。

v.insert(v.end(), 10); // v の末尾に 10 を追加
v.insert(v.end() + 1, 10); // 未定義動作
v.end() + 1; // insert() 無しでこれだけでも未定義動作に突入



53 名前:デフォルトの名無しさん mailto:sage [2009/01/23(金) 12:33:00 ]

end()まではOKなのか

54 名前:デフォルトの名無しさん mailto:sage [2009/01/23(金) 17:28:52 ]
データをファイルに保存してその内容を読み込んでlistに入れてます
単純なintとかなら出来るのですが、クラスなどになった場合、どのようにデータを取得すればよいでしょうか?

// int の場合はこのようにしてデータを取得しています
using namespace std;
ifstream dataFile("test.dat");
if( !dataFile ) return -1;
istream_iterator iterBegin(dataFile);
istream_iterator iterEnd;
list<int> lstData(iterBegin,iterEnd);
dataFile.close();

55 名前:デフォルトの名無しさん mailto:sage [2009/01/23(金) 17:40:05 ]
シリアライズでぐぐれ

56 名前:デフォルトの名無しさん mailto:sage [2009/01/23(金) 18:15:39 ]
アリガトゴザイマース
Boostがすごすぎる

57 名前:デフォルトの名無しさん mailto:sage [2009/01/24(土) 01:38:36 ]
endまで有効でend+1が無効なのは、配列変数へのポインタと一緒

char a[10];
char *p1=a+10; // OK
char *p2=a+11; // NG
char *p3=(a+11)-1; // NG (p1==p3は保証されない)

58 名前:デフォルトの名無しさん mailto:sage [2009/01/24(土) 01:40:47 ]
このうそつきめ!

59 名前:デフォルトの名無しさん mailto:sage [2009/01/24(土) 01:41:12 ]
p1 もデリファレンスした瞬間アウツなんだよな。

60 名前:デフォルトの名無しさん mailto:sage [2009/01/24(土) 02:01:24 ]
ポインタの加算演算って型の大きさに合わせて保存してるアドレスの値増減するだけじゃないの?
デリファレンスしてなくてもだめなことあるの?

61 名前:デフォルトの名無しさん mailto:sage [2009/01/24(土) 02:03:46 ]
>>60
ヌルポインタになるかもしれない

62 名前:デフォルトの名無しさん mailto:sage [2009/01/24(土) 04:03:58 ]
>>57
p1==p3が保証されないのってマジ?
もしそうならポインタ演算とか怖くて出来なくなるな



63 名前:デフォルトの名無しさん mailto:sage [2009/01/24(土) 06:06:06 ]
>>60
配列(非配列は要素数1の配列とみなして)の要素か終端までを指すように演算することは
できるけど、その範囲外を指すようにした場合は未定義動作になる。

char a[10];
a - 1; // 未定義動作
a + 10; // 終端なのでまだ大丈夫
a + 11; // 未定義動作

64 名前:デフォルトの名無しさん mailto:sage [2009/01/24(土) 06:10:58 ]
v.erase( v.end() );
v.erase( v.end(), v.end() );
同じようで違うとゆー

65 名前:デフォルトの名無しさん mailto:sage [2009/01/24(土) 07:35:54 ]
>>63
ほんとだ。

5.7 Additive operators p5 より
> When an expression that has integral type is added to or subtracted from a pointer,
> the result has the type of the pointer operand. ...
> ... If both the pointer operand and the result point to elements of the same array object, or
> one past the last element of the array object, the evaluation shall not produce an overflow;
> otherwise, the behavior is undefined.

66 名前:デフォルトの名無しさん mailto:sage [2009/01/24(土) 10:32:33 ]
>>57->>68
この中にウソを言っているものがいる。
このうそつきめ!

67 名前:67 mailto:sage [2009/01/24(土) 10:37:11 ]
   *      *
  *     +  うそです
     n ∧_∧ n
 + (ヨ(* ´∀`)E)
      Y     Y    *


68 名前:デフォルトの名無しさん mailto:sage [2009/01/24(土) 11:05:25 ]
なんで皆騙されてんだよw
(a+11)-1 != a+10 が成立する訳ないだろ、そんなんじゃとてもコンパイラ作れねーよ。
もちろん *(a+10)とか*(a-1)とかを使ったら無効なアドレスの参照だから何が起こるかわかんないけど、
ポインタ演算の時点では問題ないっての。



69 名前:デフォルトの名無しさん mailto:sage [2009/01/24(土) 11:25:08 ]
a+11がオーバーフロー起こす可能性があって、
その場合-1しても戻るとは限らないってことだろ
>>65によると

70 名前:デフォルトの名無しさん mailto:sage [2009/01/24(土) 11:53:33 ]
ちょっと込み入った算式に入れてたりしたら、マズイ場合あるな。
もっとも、ポインタ値みたいなものへの計算値に基づいて
更に計算、みたいな恐いことはまずやらんけど。

71 名前:デフォルトの名無しさん mailto:sage [2009/01/24(土) 12:07:29 ]
>>68
実装依存なことと規格で保証されていることの区別のつかないバカ

72 名前:デフォルトの名無しさん mailto:sage [2009/01/24(土) 12:29:02 ]
>>71
バカと言えば勝った気になってるバカ



73 名前:デフォルトの名無しさん mailto:sage [2009/01/24(土) 12:32:53 ]
実際の配置からすれば、ちょっと飛び出しても大丈夫ではあるよね

74 名前:デフォルトの名無しさん mailto:sage [2009/01/24(土) 12:40:36 ]
>>68
オーバーフロー時に例外が発生するCPUでは
(a+11) を実行した時点で例外が発生して比較自体が行われない可能性がある。

75 名前:デフォルトの名無しさん mailto:sage [2009/01/24(土) 15:26:42 ]
大人しくa+(11-1)しろってことだよ。

76 名前:デフォルトの名無しさん mailto:sage [2009/01/24(土) 16:38:12 ]
もちろん、自分がコンパイラを作るときは、
(a + 11) - 1をa + 10と同じ結果にしても構わないんだよ。

77 名前:デフォルトの名無しさん mailto:sage [2009/01/24(土) 23:50:11 ]
int *p=0; // nullpointrt;
p+=1;
assert(p!=0);

ヌルポインタをインクリメントした結果が、非ヌルになることも保証されないんだよね
やっぱり

78 名前:デフォルトの名無しさん mailto:sage [2009/01/24(土) 23:55:00 ]
オプション次第で変なアドレスを指す際にエラーとするコンパイラがあってもいいんじゃね。

79 名前:デフォルトの名無しさん mailto:sage [2009/01/24(土) 23:57:03 ]
その辺をどう扱ってもいいというのがすなわち未定義ということだ

80 名前:デフォルトの名無しさん mailto:sage [2009/01/24(土) 23:59:19 ]
文句があるならCの親のBCPLに言いな。

81 名前:デフォルトの名無しさん mailto:sage [2009/01/25(日) 00:12:29 ]
DSPなんかで、そういう問題が起こるケースがあったと思う

int *getptr(int x) {
static array[0x2000];
return array+(x*10);
}

offsetの計算を16ビットレジスタでやった方が高速化される環境だと
最適化によって x*10の結果の上位を捨てて下位16ビットしか使わないコードが生成されても文句が言えない

82 名前:デフォルトの名無しさん mailto:sage [2009/01/29(木) 13:47:49 ]
VS2005で動いている既存のプロジェクトにSTLport5.1.0を導入しようとしているのですが
typeinfo.hのbad_castとbad_typeidがC2039・C2873エラーになります。
解決の方法がありましたら教えてください

個人の趣味で作ってるプログラムだし、例外捨ててコメントアウトかな…



83 名前:デフォルトの名無しさん mailto:sage [2009/01/29(木) 14:02:31 ]
>>82
んー?
ml.tietew.jp/cppll/cppll/thread_articles/5592

84 名前:82 mailto:sage [2009/01/29(木) 15:10:00 ]
ありがとう、見てみました
boost使ってないので少しわからないとこもありますが

5.0〜ならいける的な事が書いてあったりしますが、その後のバージョンなんですよね…

自分はtypeinfo.h内の::bad_cast記述部分二対して 存在しないのでエラーになっているのですが
上記ページだとtypeinfo.hをインクルードしているとかで混乱します

85 名前:デフォルトの名無しさん mailto:sage [2009/01/29(木) 20:13:48 ]
同じバージョンじゃないから確認とかしてないから話半分に

IOSTREAM(S)をどっちで使うか設定するとこあるから
それに似たbad_cast(exception)とかあるかも

86 名前:デフォルトの名無しさん [2009/01/30(金) 20:36:39 ]
123.writeboard.com/27c7a247acc07351e/login
pass:pgtwit

87 名前:デフォルトの名無しさん mailto:sage [2009/01/30(金) 21:17:24 ]
ついったー(笑)でやれ

88 名前:デフォルトの名無しさん [2009/02/01(日) 11:42:50 ]
VC2005 Express Edition使っているんだけど
streambuf_iteratorってどのヘッダインクルードすればいいの?

89 名前:88 mailto:sage [2009/02/01(日) 12:09:33 ]
ごめん
istreambuf_iteratorにしてなかったから駄目だったんだ

90 名前:デフォルトの名無しさん [2009/02/02(月) 14:05:11 ]
>>88

#include <iterator>

91 名前:デフォルトの名無しさん mailto:sage [2009/02/04(水) 16:24:38 ]
VC9+MFCのアンマネージでmapは使えないのでしょうか?
xtreeでアクセス違反が出るんですが・・・

92 名前:デフォルトの名無しさん mailto:sage [2009/02/04(水) 16:54:44 ]
>>91
それは何か使い方が間違っている。そしてそれは恐らくは、STLに直接関係ない。



93 名前:デフォルトの名無しさん [2009/02/04(水) 18:31:55 ]
すみません、vectorで質問なのですが
//------------------------------------
#include <vector>
using namespace std;

int _tmain(int argc, char* argv[])
{
vector<bool> bool_vect(10);
bool& b = bool_vect[5];

vector<int> int_vect(10);
int& i = int_vect[5];

return 0;
}
//-------------------------------------

bool のほうで以下のコンパイルエラーが出てしまいます
error C2440: '初期化中' : 'std::_Vb_reference<_MycontTy>' から 'bool &' に変換できません。
with
[
_MycontTy=std::vector<bool,std::allocator<bool>>
]

回避する方法はないでしょうか?

94 名前:デフォルトの名無しさん mailto:sage [2009/02/04(水) 18:36:51 ]
何が目的で参照をとろうとするの?必要性が感じられないのだけど。

95 名前:デフォルトの名無しさん mailto:sage [2009/02/04(水) 18:40:22 ]
>>93
vector<bool>は使うなカス
詳しくはEffectiveSTL

96 名前:デフォルトの名無しさん mailto:sage [2009/02/04(水) 18:44:02 ]
>>93
内部がビット操作だったはず

97 名前:デフォルトの名無しさん mailto:sage [2009/02/04(水) 19:57:39 ]
なるほど、「std::vector<bool>はコンテナの要件を満たしていない。 」のですね。
ありがとうございます。

>>94
実際に必要性が出ているのは、もう少しややこしいコードで、
任意の型の参照を引数に取る関数に
その任意の型のvectorの要素をそのまま渡したかったのです。
とりあえずはboolだけ特殊化して回避することにします。
ただ、任意の型に対応するならvectorじゃなくて配列にした方がいいのかもしれないですね。

ともかくありがとうございました。

98 名前:デフォルトの名無しさん mailto:sage [2009/02/04(水) 20:21:16 ]
>>97
vector<T>::reference使えばいけるはず。

99 名前:デフォルトの名無しさん mailto:sage [2009/02/04(水) 21:23:37 ]
>>98
おぉ、STLっぽくなりました。
ありがとうございます。

100 名前:デフォルトの名無しさん mailto:sage [2009/02/04(水) 21:42:37 ]
bool なら deque 使うだろjk

101 名前:デフォルトの名無しさん mailto:sage [2009/02/05(木) 02:15:21 ]
deque<bool>とlist<bool>はコンテナだっけ

102 名前:デフォルトの名無しさん mailto:sage [2009/02/05(木) 02:41:59 ]
コンテナだよ



103 名前:デフォルトの名無しさん mailto:sage [2009/02/07(土) 10:45:12 ]
list<bool>・・・
使い道が思いつかないな

104 名前:デフォルトの名無しさん mailto:sage [2009/02/07(土) 11:07:37 ]
つbitset


105 名前:デフォルトの名無しさん mailto:sage [2009/02/11(水) 15:26:30 ]
vector<int>のインスタンスがa,b,cとあって、aとbの要素をつなぎ合わせたcを作るにはどう書くのが一番シンプルですか?
例えばaに1,2,3が、bに4,5,6が入っている時、cを1,2,3,4,5,6にしたいです。

106 名前:デフォルトの名無しさん mailto:sage [2009/02/11(水) 15:33:22 ]
c=a; c.insert(c.end(),b.begin(),b.end());

107 名前:デフォルトの名無しさん mailto:sage [2009/02/11(水) 15:36:52 ]
>>106
ありがとうございます。

108 名前:デフォルトの名無しさん mailto:sage [2009/02/11(水) 15:38:18 ]
intのvectorならこっちの方が速いし自然だよ
>>106は中身がクラスの場合用

size_t a_n = a.size();
size_t b_n = b.size();
std::vector<int> c(a_n+b_n);
memcpy(c.begin(),a.begin(),a_n);
memcpy(c.begin()+a_n,b.begin(),b_n);

109 名前:デフォルトの名無しさん mailto:sage [2009/02/11(水) 15:48:05 ]
>>108
なるほど、どうもです。

110 名前:デフォルトの名無しさん mailto:sage [2009/02/11(水) 16:03:25 ]
std::vector<int> v = (v1|pstade::oven::jointed(v2))|pstade::oven::copied;

111 名前:デフォルトの名無しさん mailto:sage [2009/02/11(水) 16:04:12 ]
>>108
memcpy使うのは最悪だろ

112 名前:デフォルトの名無しさん mailto:sage [2009/02/11(水) 16:09:40 ]
>>111
vector と PODの組み合わせなんだから別にいいだろ



113 名前:デフォルトの名無しさん mailto:sage [2009/02/11(水) 16:20:27 ]
ovenは相変わらず反則だな

114 名前:デフォルトの名無しさん mailto:sage [2009/02/11(水) 16:26:51 ]
わざわざ型安全性を捨ててメモリ不正アクセスの危険を冒してまでmemcpyを使う必要はなかろう
コピーするにしても std::copy を使うべき

よっぽど速度が遅くて困らない限りは >>106 で十分






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

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

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