問題タブ [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 投票する
9 に答える
59879 参照

c++ - C++ valarray とベクトル

ベクター大好きです。彼らは気の利いた、速いです。しかし、valarray と呼ばれるものが存在することは知っています。ベクトルの代わりに valarray を使用するのはなぜですか? valarray には構文糖衣があることは知っていますが、それ以外に、いつ役立つのでしょうか?

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

c++ - XCode + C++でどのようにstd::vectorを実行しますか?

さまざまな理由から (そして、それらが有効であることを保証するので、「ココアを使用する」という話はやめてください)、Mac でいくつかのグラフィック デモを再構築するために、XCode、C++、OpenGL、OpenCL (サイドに少し GLUT を使用) を使用する必要があります。 (XP + Visual Studio 2005 開発による)。このプロジェクトは、「c++ stdc++」を使用してコマンド ライン ツールとしてビルドされました。

私の Program.h ファイルは、シェーダー オブジェクトを相互に接続し、コンパイルし、リンクし、その他の方法で OpenGL シェーダー プログラムとして使用できるように準備します。このファイルには、次の関連するコード行が含まれています。

クラスのプライベートセクション内:

シェーダ ハンドルを追加する場合:

最後に、プッシュされたシェーダー ハンドルを使用する場合:

私のすべての経験と調査では、C++ 内のこれらの行に問題はありません。ただし、コンパイル時に (デバッグまたはリリースに関係なく、_GLIBCXX_DEBUG問題とは関係ありません)、次の 4 つのエラーが生成されます。

また、stl_bvector.h および vector.tcc にリンクするファイルは次のとおりです。

これまでのところ、多数の Google 検索で何も見つかりませんでした。このコードはすべて、Windows 上で問題なく動作します。さらに悪いことに、上記のコードを同等のリストに置き換えると、次のようになります。

と、

と、

プログラムは期待どおりに動作します。

しかし、これを完全にベクトルの実装のせいにすることはできません。次のプログラムがあるからです。

問題なく動作します。

必要に応じてさらに情報を提供させていただきます。

Cocoa/Objective-C を使うべきだとは言わないでください。それは今のところ本当にオプションではありません。はい、リストを使用してこの機能を実現できますが、デモの他の部分は簡単に作り直すことができません。

0 投票する
6 に答える
298 参照

c++ - 4 つの std::vector オブジェクトから、要素が最も多いオブジェクトを選択します

私は 4 つの std::vector コンテナーを持っており、そのすべてに要素が含まれている (または含まれていない) 可能性があります。それらのどれが最も多くの要素を持っているかを判断し、後でそれを使用したいと考えています。

それぞれのサイズをキーとして、それらのコンテナーへの参照を値として std::map を作成しようとしました。次に、各ベクトルの size() に std::max を適用して最大値を計算し、std::map を介してアクセスしました。

明らかに、少なくとも 2 つのベクトルに同じ数の要素があると、これは問題になります。

誰でもエレガントなソリューションを考えられますか?

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

c++ - stl vector がランダムアクセスを与える方法

昨日の夕方、仕事に std::vector を使用していたのですが、この質問が頭に浮かびました: vector はどのようにしてランダムアクセスを提供するのでしょうか?

コードを調べようとしましたが、失敗しました。誰でもいくつかの指針を与えることができますか?

ありがとう、アルン

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

c++ - ベクトルがスコープ外になったときにデータが解放されないようにする

std::vector に含まれるデータの所有権を別のコンストラクトに転送する方法はありますか (たとえば、T*data が指す)、ベクターが範囲外になった後に「データ」がダングリング ポインターになるのを防ぎますか?

編集:データをコピーしたくありません(これは簡単ですが効果のない解決策です)。

具体的には、次のようなものが欲しいです。

これをエミュレートするために頭に浮かぶ唯一のことは次のとおりです。

その後、データは後で解放されるか、(私の場合) mxSetData(mxArray A,double data) として使用されます。ただし、これにより、小さなメモリリークが発生します(vの容量、サイズなどを処理するためのデータ構造体ですが、もちろんデータ自体ではありません)。

漏れなくできますか?

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

c++ - Converting between C++ std::vector and C array without copying

I would like to be able to convert between std::vector and its underlying C array int* without explicitly copying the data.

Does std::vector provide access to the underlying C array? I am looking for something like this

EDIT:

Also, is it possible to do the converse, i.e. how would I initialize an std::vector from a C array without copying?

0 投票する
6 に答える
5590 参照

c++ - std :: vector::reserveパフォーマンスペナルティ

上記の関数は約17000回実行され、vector :: reservedを呼び出すと、 約2桁悪化ました(私が見る限り、いくつかの変換が含まれていました) 。

私はいつも、reserveは小さな値でもpush_backを高速化できるという印象を受けていましたが、これは真実ではないようで、このようにすべきではない明確な理由を見つけることができません。リザーブは関数のインライン化を防ぎますか?size()の呼び出しは高すぎますか?これはプラットフォームに依存しますか?クリーンな環境でこれを確認するために、いくつかの小さなベンチマークをコーディングしてみます。

コンパイラ:gcc (GCC) 4.4.2-g-O2を使用

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

c++ - 循環イテレータ (サーキュレータ) を作成する最も簡単な方法は?

ゲームの連続ループで移動したいオブジェクトがあります。std::vectorウェイポイントとして使用したい一連の座標があります。

std::vector<T>::iteratorサイクリック (サーキュレーターとも呼ばれます)を作成する方法はありますか?

私が思い付くことができる最善の方法は、2 つのイテレータを用意し、最初のイテレータが使い果たされるたびに、2 番目のイテレータの値を代入することです (これは他のことには使用されません)。代入演算子は、反復子がインデックスを保持するために使用しているものをコピーしますか、それとも単に参照されるだけですか (したがって、2 回目のラウンドの後は役に立たなくなります)。

オブジェクトがウェイポイントを永遠に移動するようにしたいのですが (オブジェクトが破棄されたが、そのメソッドでそれが起こらない場合を除きます)、イテレータはフレームごとに 1 回だけ呼び出され、ゲーム内の他のオブジェクトを更新できるように戻る必要があります。 .

ソリューションは、gcc および Microsoft コンパイラで動作する必要があります (標準の C++ で記述できない場合)。

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

c++ - 特定の要素が c++ STL ベクトルに存在するかどうかを確認する

v[i] のように要素にアクセスする前に、特定のベクトル位置 (i など) に要素が存在するかどうかを確認したかったのです。どうすればそれができるか教えていただけますか?

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

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

c++ - std::vector reserve メソッドが十分なメモリを割り当てられない

次のように、C++ アプリケーションにバッファー クラスがあります。

必要なメモリ領域を割り当てることができないため、コンストラクターの使用が失敗することがあります。たとえば、一度、コンストラクターを呼び出すと、res = 37コア ダンプから取得した次のスタック トレースでセグメンテーション違反が発生しました。

GCC 4.4.2 を使用してこのアプリケーションを 64 ビット アプリケーションとしてコンパイルし、Debian 5 x64 で使用しています。

どんな助けでも大歓迎です。ありがとう