[過去ログ]
C++相談室 part164 (1002レス)
C++相談室 part164 http://mevius.5ch.net/test/read.cgi/tech/1683600652/
上
下
前次
1-
新
通常表示
512バイト分割
レス栞
抽出解除
レス栞
このスレッドは過去ログ倉庫に格納されています。
次スレ検索
歴削→次スレ
栞削→次スレ
過去ログメニュー
497: デフォルトの名無しさん (ワッチョイ 0928-rP6O) [sage] 2023/07/17(月) 18:33:54.32 ID:mG7BHGLy0 質問なのですがclass Datasというクラスがあってstd:::vector<Datas> vec((size_t)100); であるときに vec[k]の場所にn個の場所を空けたい(値は初期化済Datasオブジェクトなら何でも良い)場合どう書くべき? やっぱ手動でsz = vec.size(); vec.resize(sz + n);して既存要素vec[k..sz-1]を後ろ(vec[k+n..])にコピーする --- (1) のが最速? 仮にstd::vector<T>::insertを使うと Datas x; // (A) vec.insert(std::next(vec.begin(), k), n, x); // (B) になると思うのですが、なんか(A)で不必要にオブジェクトを1個構築せねばならないのと (B)で多分デフォルトコンストラクタではなくコピコンがn回呼ばれるのちょっち嫌 (なぜなら(1)のコピーとn個分の場所の確保に加えて、xをn回コピーするという余デフォルト構築よりも遅そうな処理をするから http://mevius.5ch.net/test/read.cgi/tech/1683600652/497
498: はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 163e-MI76) [sage] 2023/07/17(月) 20:23:35.30 ID:YifLUjyU0 >>497 resize だって再配置 (に付随するコピー) の可能性はあるんで どっちでも大差ないんじゃないかな。 楽だと思うほうで書けばいいと思うよ。 http://mevius.5ch.net/test/read.cgi/tech/1683600652/498
499: デフォルトの名無しさん (ワッチョイ 915f-9/0y) [sage] 2023/07/17(月) 21:47:09.31 ID:I9Lq0d6Q0 >>497 無駄なデフォルトコンストラクタやコピーを削って極力ムーブで済ませようと思ったら sz, k, n の大小関係ごとに場合分けして move_iterator 経由の insert とか使い分ければ いけそうだけど、面倒なわりに見合うほど効率改善しそうな気はしない。 http://mevius.5ch.net/test/read.cgi/tech/1683600652/499
メモ帳
(0/65535文字)
上
下
前次
1-
新
書
関
写
板
覧
索
設
栞
歴
スレ情報
赤レス抽出
画像レス抽出
歴の未読スレ
AAサムネイル
Google検索
Wikipedia
ぬこの手
ぬこTOP
1.315s*