問題タブ [stl]

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 投票する
10 に答える
2628 参照

c++ - C++ 2 次元配列の最適化

C++ で double の 2 次元配列 (密な行列) を表現する方法が必要で、アクセス オーバーヘッドを最小限に抑える必要があります。

さまざまな linux/unix マシンと gcc バージョンでタイミングを計りました。次のように宣言された、ベクトルの STL ベクトル。

経由でアクセスするmatrix[i][j]と、次のように宣言された配列よりもアクセスが 5% から 100% 遅くなります。

i+n*jmatrix[index(i,j)]に評価されるインライン インデックス関数を介してアクセスされます。index(i,j)STL を使用せずに 2 次元配列を配置する他の方法 (各行の先頭への n 個のポインターの配列、またはスタック上の全体を一定サイズとして定義するmatrix[n][n]方法) は、インデックス関数メソッドとほぼ同じ速度で実行されます。

最近の GCC バージョン (> 4.0) では、最適化がオンになっている場合、STL ベクトルのベクトルを非 STL コードとほぼ同じ効率でコンパイルできるようですが、これは多少マシンに依存します。

可能であれば STL を使用したいのですが、最速のソリューションを選択する必要があります。GCC で STL を最適化した経験のある人はいますか?

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

c++ - 使用するコンテナを公開せずにイテレータを公開するにはどうすればよいですか?

私はしばらくの間C#を使用していますが、C++に戻るのは頭痛の種です。私は自分のプラクティスのいくつかをC#からC ++に移行しようとしていますが、抵抗を感じているので、あなたの助けを喜んで受け入れます。

次のようなクラスのイテレータを公開したいと思います。

問題ないことをやっていますか?typedef std :: vector <T> :: iteratorだけでいいですか?実装コンテナではなく、イテレータに依存することを望んでいます...

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

c++ - wfstream からバイナリデータを読み取るにはどうすればよいですか?

ファイルからデータを読み取るのに少し問題があります。wstring だけでなく、任意のサイズ (サイズはバイト単位) の生データのチャンクも読み取れるようにしたいと考えています。

おそらく、間違ったストリームを使用しているか、それらの線に沿った何かを使用しています。基本的に、wstring、データのサイズ (バイト数は任意) を読み取り、その後にそのバイト数のコンポーネント データを読みたいと考えています。明らかに、テンプレートは wchar_t を想定しているため、char を読み取ることはできません。

wchar_t を読み取ることはできますが、データが sizeof(wchar_t) によって整列されていることを確認する必要があります。そうしないと、ストリームが破損する可能性があります。シナリオは、データが 15 バイトの場合です。次のデータ チャンクを読み取れるようにするには、16 バイトを読み取り、不要なバイトをマスクし、ストリームを 15 バイトのオフセットまでシークする必要があります (可能な場合は、テンプレート化された wchar_t を使用しますか?)。

明らかに、私がやろうとしていることを達成するためのより良い方法があるはずです.

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

c++ - 組み込みアプリケーション用に std::string から std::wstring に切り替えますか?

これまで、組み込みシステム (ルーター、スイッチ、通信機器など) の C++ アプリケーションで std::string を使用してきました。

次のプロジェクトでは、Unicode サポートのために std::string から std::wstring に切り替えることを検討しています。これにより、たとえば、エンド ユーザーはコマンド ライン インターフェイス (CLI) で漢字を使用できるようになります。

どのような合併症 / 頭痛 / 驚きが予想されますか? たとえば、まだ std::string を使用しているサードパーティのライブラリを使用するとどうなりますか?

国際文字列のサポートは、私が取り組んでいる組み込みシステムの要件としてはそれほど強力ではないので、大きな頭痛の種にならない場合にのみサポートします。

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

c++ - ベクトルを初期値で特定の長さに (再) 初期化する

関数の引数として、vector<double>& vec長さと値が不明な(出力ベクトル、したがって非定数)を取得します。このベクトルをすべてゼロで特定の長さ n に初期化したいと思います。

これはうまくいきます

そして、これも同様に機能します:

2 番目の方が効率的ですか (メモリの割り当て解除/割り当てが行われないため)? これを行うより効率的な方法はありますか?

0 投票する
15 に答える
7179 参照

c++ - STLか!STLか、それが問題だ

間違いなく、ほとんどの C++ プログラミング プロジェクトで STL を使用することを選択します。最近、「STLを使わないケースはありますか?」という質問がありました...

考えれば考えるほど、STL を使用しないことを選択する場合があるかもしれないことに気付きました...たとえば、コードベースが数年続くと予想される非常に大規模で長期的なプロジェクト...おそらくプロジェクトのニーズに正確に適合するカスタム コンテナ ソリューションは、初期オーバーヘッドに見合うだけの価値がありますか? STLにしないことを選択するケースはありますか?

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

c++ - 既存の配列のSTL非コピーラッパー?

POD 型の要素の既存の配列に対して、STL のようなコンテナー、または単に STL スタイルのイテレーターを作成することは可能ですか?

たとえば、int の配列があるとします。この配列に対して、find_if、count_if、または sort などの STL 関数を直接呼び出せると便利です。

非解決策: 配列全体をコピーするか、要素への参照だけをコピーします。目標は、メモリと時間を大幅に節約しながら、できれば他の STL アルゴリズムを使用できるようにすることです。

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

c++ - STLマップ/セット/マルチセット/マルチマップを使用して、検索キー以上の最初の値を見つける方法は?

std :: set:に格納されている値のセットがあるとします。

{1、2、6、8}

そして、たとえば3の検索キーがあります。3を関数に入れて、3以上の最初の値を取得したいのですが、この場合は6を取得したいと思います。

map / set / multimap / and setで提供されるfind()関数は、もちろん、この場合の終了イテレータを返します。この場合に6を返す同様の関数はありますか?

0 投票する
7 に答える
10718 参照

c++ - std::string使用時のbad_allocエラー

私は現在、ファイルへのパスを提供することに依存するプロジェクトに取り組んでいます(例C:\Path.pth)。さて、昨日は次の電話をかけてすべてが機能std::stringしました。

しかし、今では機能しません。をスローしbad_allocます。' \'文字が問題のようです。\x5C代わりにASCII値として使用してみましたが、同じ結果になりました。

#defineさて、私の質問は、これを引き起こした可能性のあるいくつかの、いくつかのコンパイラオプション、または他の「非コード」を台無しにした可能性がありますか?VS2005を使用しています。

どんな助けでも大歓迎です


PierreBdR

..それは非常にありそうに聞こえます。または少なくとも、それは:Pする必要があります

ある種の/SetStringCharSize:2bit-compilerオプションについては誰も言及していないので、私のコードはどこかで何かを台無しにする必要があり、間違っているのは単なる愚かなコンパイラオプション(または同様のもの)ではないと考えるのが安全だと思います。 。

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

c++ - イテレータ..なぜそれらを使用するのですか?

STL ライブラリでは、いくつかのコンテナーにイテレーターがあり、単純な for ループよりも、これらのコンテナーを反復処理する優れた方法であると一般的に考えられています。

なぜ、どのような場合にイテレータを使用する必要があるのか​​ 、どのような場合に上記のコードスニペットを教えてもらえますか?