問題タブ [stdvector]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
1894 参照

c++ - std::vector insert() 再割り当て

std::vector コードを調べていたところ、よくわからないものが見つかりました。capacity < size() + 1 の場合、新しい要素を挿入できるようにバッファーを再割り当てする必要があります。それが何をするか(コードから抽出できた限り)は次のとおりです。

  • 新しいバッファを割り当てます
  • 古いバッファのプレフィックスをコピーします (0 - 挿入のインデックス)
  • 新しいバッファに新しい要素を構築します
  • 古いバッファのサフィックスをコピーします (インデックス - 終了)
  • 古いバッファ内のすべての項目でデストラクタを呼び出す
  • 古いバッファの割り当てを解除

私が見る限り、接頭辞と接尾辞のコピーは memmove で行われます。memmove はデータの純粋なバイナリ コピーではありませんか? 要素のコンストラクターを呼び出しませんよね?私が疑問に思っていたのは、メモリが移動されただけで、新しいバッファで再構築されていない場合、関数が古いバッファの要素でデストラクタを呼び出すのはなぜですか?

0 投票する
2 に答える
4881 参照

c++ - 即時ウィンドウでstd::vectorにインデックスを付けることができないのはなぜですか?

だから、私はベクトルを持っています

このベクトルを埋めて、次のようにアクセスできます

ただし、即時ウィンドウでは、両方

まったく動作しません。C++でイミディエイトウィンドウを使用するコツはありますか?私は主にC#のバックグラウンドから来ており、すべてがうまく機能しています(そして、イミディエイトウィンドウにインテリセンスがあります)。私はC++が素晴らしいとは思っていませんでしたが、int以外のことでも機能すると思いました。誰かが私が間違っていることを教えてもらえますか?ありがとう。

編集:私は明確にする必要があります、直接のウィンドウでは実際には何も機能しません、これは単なる単純化された例です

編集:私はデバッグモードです

0 投票する
8 に答える
131540 参照

c++ - std::vector は push_back でオブジェクトをコピーしていますか?

valgrind で多くの調査を行った結果、std::vector は push_back したいオブジェクトのコピーを作成するという結論に達しました。

それは本当に本当ですか?ベクトルは、コピーなしではオブジェクトの参照またはポインタを保持できません?!

ありがとう

0 投票する
5 に答える
2228 参照

c++ - ベクターへのpush_back

奇妙な問題があります。オブジェクトを次のようにプッシュしたいベクトルがあります。

ベクトルには数百の DEMData オブジェクトがあります。問題は、このコードが終了したとき、すべてのアイテムがベクターに「プッシュバック」された最後のアイテムと等しいことです。

ベクトルで他のオブジェクトがオーバーライドされるのはなぜですか?

編集:

DemData クラスは単純で、セッターとゲッターを含むデータ構造だけです。

編集:

XML ファイルを読み取り、各 xml 要素の属性に基づいて DEMData オブジェクトを構築しています。

0 投票する
5 に答える
237 参照

c++ - 次の std::vector コードは有効ですか?

上記のコードは安全ですか?

0 投票する
3 に答える
5440 参照

c++ - この場合、std::vectorのどのコンストラクターが使用されますか

これは単純に見えますが、私は混乱しています。たとえば、intsが100のベクトルを作成する方法は次のとおりです。

ただし、std :: vectorのドキュメントを見ると、そのコンストラクターは次の形式であることがわかります。

では、前のものはどのように機能しますか?newデフォルトのコンストラクターから取得した初期化値を使用してコンストラクターを呼び出しますか?もしそうなら、

私は自分のアロケータを渡すところ、また働きますか?

0 投票する
1 に答える
201 参照

c++ - テンプレート内の T のベクトルのベクトルクラス

このコードがコンパイルされないのはなぜですか (Cygwin)?

エラー: std::vector<std::vector<Ttile, std::allocator<_CharT> >, std::allocator<std::vector<Ttile, std::allocator<_CharT> > > >' is not derived from typeTilemap と入力してください

0 投票する
2 に答える
850 参照

c++ - メモリプールを使用するクラスのメンバーとしてC++ベクトルを配置する

レガシーアプリケーションで使用するために、ADO/ODBCを使用してデータベースにアクセスするためのマルチスレッドDLLを作成してきました。スレッドごとに複数のデータベース接続を維持する必要があるため、接続ごとにADOオブジェクトをオブジェクトに配置し、それらの配列をカスタムthreadInfoオブジェクト内に保持することを検討しました。明らかに、ここではベクトルの方が適しています。外出先でオブジェクトを削除/再配置する必要があります。ベクトルを使用すると、それが単純化されます。問題は、ヒープの競合などを回避するためにスレッドごとにヒープを割り当て、そこからすべてのメモリを割り当てることです。

だから私の質問は:どうすればベクトルをスレッド固有のヒープから割り当てることができますか?(または、ラッパークラスと同じヒープからメモリを割り当てることを内部的に知っているでしょうか?可能性は低いですが、私はC ++の人ではありません)少しグーグルで調べたところ、アロケータなどを作成する必要があるようです-これは私が望まない仕事のように見えます。他に方法はありますか?ベクトルは配置を使用していると聞きました-内部のすべてのものに新しいので、オーバーロード演算子newをそれに組み込むことができますか?

私は主にCプログラマーであるため(それでも-比較的)、C++の内部に関する私の知識は役に立ちません。どこかで初歩的なものが欠けている可能性が非常に高いです。簡単なことは何も思い浮かびません-私はただ配列のことをするかもしれませんが、うまくいけばそれは実現しません。

私はMS-VC++6.0を使用しています(笑うのは失礼です!:-P)。

どんな/すべての助けも大歓迎です。

0 投票する
4 に答える
173 参照

c++ - std::vector 内のオブジェクトを指す を返す

vector の要素への参照を返すことについて、非常に基本的な質問があります。

vecclass のインスタンスを格納する vector がありますFoo。この vector から要素にアクセスしたい。(ベクトル インデックスを使用したくない) . ここでメソッドをどのようにコーディングすればよいgetFooですか?