問題タブ [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.
c++ - C++ valarray とベクトル
ベクター大好きです。彼らは気の利いた、速いです。しかし、valarray と呼ばれるものが存在することは知っています。ベクトルの代わりに valarray を使用するのはなぜですか? valarray には構文糖衣があることは知っていますが、それ以外に、いつ役立つのでしょうか?
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 を使うべきだとは言わないでください。それは今のところ本当にオプションではありません。はい、リストを使用してこの機能を実現できますが、デモの他の部分は簡単に作り直すことができません。
c++ - 4 つの std::vector オブジェクトから、要素が最も多いオブジェクトを選択します
私は 4 つの std::vector コンテナーを持っており、そのすべてに要素が含まれている (または含まれていない) 可能性があります。それらのどれが最も多くの要素を持っているかを判断し、後でそれを使用したいと考えています。
それぞれのサイズをキーとして、それらのコンテナーへの参照を値として std::map を作成しようとしました。次に、各ベクトルの size() に std::max を適用して最大値を計算し、std::map を介してアクセスしました。
明らかに、少なくとも 2 つのベクトルに同じ数の要素があると、これは問題になります。
誰でもエレガントなソリューションを考えられますか?
c++ - stl vector がランダムアクセスを与える方法
昨日の夕方、仕事に std::vector を使用していたのですが、この質問が頭に浮かびました: vector はどのようにしてランダムアクセスを提供するのでしょうか?
コードを調べようとしましたが、失敗しました。誰でもいくつかの指針を与えることができますか?
ありがとう、アルン
c++ - ベクトルがスコープ外になったときにデータが解放されないようにする
std::vector に含まれるデータの所有権を別のコンストラクトに転送する方法はありますか (たとえば、T*data が指す)、ベクターが範囲外になった後に「データ」がダングリング ポインターになるのを防ぎますか?
編集:データをコピーしたくありません(これは簡単ですが効果のない解決策です)。
具体的には、次のようなものが欲しいです。
これをエミュレートするために頭に浮かぶ唯一のことは次のとおりです。
その後、データは後で解放されるか、(私の場合) mxSetData(mxArray A,double data) として使用されます。ただし、これにより、小さなメモリリークが発生します(vの容量、サイズなどを処理するためのデータ構造体ですが、もちろんデータ自体ではありません)。
漏れなくできますか?
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?
c++ - std :: vector::reserveパフォーマンスペナルティ
上記の関数は約17000回実行され、vector :: reservedを呼び出すと、 約2桁悪化しました(私が見る限り、いくつかの変換が含まれていました) 。
私はいつも、reserveは小さな値でもpush_backを高速化できるという印象を受けていましたが、これは真実ではないようで、このようにすべきではない明確な理由を見つけることができません。リザーブは関数のインライン化を防ぎますか?size()の呼び出しは高すぎますか?これはプラットフォームに依存しますか?クリーンな環境でこれを確認するために、いくつかの小さなベンチマークをコーディングしてみます。
コンパイラ:gcc (GCC) 4.4.2
-g-O2を使用
c++ - 循環イテレータ (サーキュレータ) を作成する最も簡単な方法は?
ゲームの連続ループで移動したいオブジェクトがあります。std::vector
ウェイポイントとして使用したい一連の座標があります。
std::vector<T>::iterator
サイクリック (サーキュレーターとも呼ばれます)を作成する方法はありますか?
私が思い付くことができる最善の方法は、2 つのイテレータを用意し、最初のイテレータが使い果たされるたびに、2 番目のイテレータの値を代入することです (これは他のことには使用されません)。代入演算子は、反復子がインデックスを保持するために使用しているものをコピーしますか、それとも単に参照されるだけですか (したがって、2 回目のラウンドの後は役に立たなくなります)。
オブジェクトがウェイポイントを永遠に移動するようにしたいのですが (オブジェクトが破棄されたが、そのメソッドでそれが起こらない場合を除きます)、イテレータはフレームごとに 1 回だけ呼び出され、ゲーム内の他のオブジェクトを更新できるように戻る必要があります。 .
ソリューションは、gcc および Microsoft コンパイラで動作する必要があります (標準の C++ で記述できない場合)。
c++ - 特定の要素が c++ STL ベクトルに存在するかどうかを確認する
v[i] のように要素にアクセスする前に、特定のベクトル位置 (i など) に要素が存在するかどうかを確認したかったのです。どうすればそれができるか教えていただけますか?
ありがとうございました。
c++ - std::vector reserve メソッドが十分なメモリを割り当てられない
次のように、C++ アプリケーションにバッファー クラスがあります。
必要なメモリ領域を割り当てることができないため、コンストラクターの使用が失敗することがあります。たとえば、一度、コンストラクターを呼び出すと、res = 37
コア ダンプから取得した次のスタック トレースでセグメンテーション違反が発生しました。
GCC 4.4.2 を使用してこのアプリケーションを 64 ビット アプリケーションとしてコンパイルし、Debian 5 x64 で使用しています。
どんな助けでも大歓迎です。ありがとう