タグ付けされた質問 「stl」

標準テンプレートライブラリ(STL)は、汎用コンテナ、イテレータ、アルゴリズム、および関数オブジェクトのC ++ライブラリです。C ++が標準化されたとき、STLの大部分が標準ライブラリに採用されました。標準ライブラリのこれらの部分は、誤ってまとめて「STL」と呼ばれることもあります。

10
マップにキーの値が含まれているかどうかを確認しますか?
STLマップに特定のキーの値が含まれているかどうかを判断する最良の方法は何ですか? #include <map> using namespace std; struct Bar { int i; }; int main() { map<int, Bar> m; Bar b = {0}; Bar b1 = {1}; m[0] = b; m[1] = b1; //Bar b2 = m[2]; map<int, Bar>::iterator iter = m.find(2); Bar b3 = iter->second; } デバッガでこれを調べると、iter単なるガベージデータのように見えます。 この行のコメントを外した場合: Bar b2 …
256 c++  stl  map 

8
Tの完全な定義を知るにはstd :: unique_ptr <T>が必要ですか?
ヘッダーに次のようなコードがあります。 #include &lt;memory&gt; class Thing; class MyClass { std::unique_ptr&lt; Thing &gt; my_thing; }; Thingタイプ定義を含まないcppにこのヘッダーを含めると、VS2010-SP1でコンパイルできません。 1&gt; C:\ Program Files(x86)\ Microsoft Visual Studio 10.0 \ VC \ include \ memory(2067):error C2027:use of undefined type 'Thing' 置き換えstd::unique_ptrによってstd::shared_ptr、それがコンパイルされます。 したがって、std::unique_ptr完全な定義が必要なのは現在のVS2010 の実装であり、完全に実装に依存していると思います。 またはそれは?標準の要件に、std::unique_ptrの実装が前方宣言のみで機能することを不可能にする何かがありますか?へのポインタのみを保持する必要があるため、奇妙に感じThingますね。

13
カスタムオブジェクトのベクターの並べ替え
カスタム(つまり、ユーザー定義)オブジェクトを含むベクターを並べ替える方法を教えてください。 おそらく、カスタムオブジェクトのフィールドの1つ(並べ替えのキーとして)を操作する述語(関数または関数オブジェクト)と共に標準のSTLアルゴリズムの並べ替えを使用する必要があります。 私は正しい軌道に乗っていますか?
248 c++  stl  sorting 

17
std :: mapからすべてのキー(または値)を取得してベクターに入れる方法は?
これは私が出てくる可能な方法の1つです。 struct RetrieveKey { template &lt;typename T&gt; typename T::first_type operator()(T keyValuePair) const { return keyValuePair.first; } }; map&lt;int, int&gt; m; vector&lt;int&gt; keys; // Retrieve all keys transform(m.begin(), m.end(), back_inserter(keys), RetrieveKey()); // Dump all keys copy(keys.begin(), keys.end(), ostream_iterator&lt;int&gt;(cout, "\n")); もちろん、別のファンクターRetrieveValuesを定義して、マップからすべての値を取得することもできます。 これを簡単に達成する他の方法はありますか?(なぜstd :: mapにそうするためのメンバー関数が含まれていないのか、いつも疑問に思っています。)
246 c++  dictionary  stl  stdmap 

10
C ++ベクトルの要素を合計する方法は?
のすべての要素の合計を見つける良い方法は何std::vectorですか? std::vector&lt;int&gt; vectorいくつかの要素を含むベクトルがあるとします。次に、すべての要素の合計を求めます。同じための異なる方法は何ですか?
240 c++  stl  vector 


16
STLのベクターとリスト
効果的なSTLで、 vectorは、デフォルトで使用されるシーケンスのタイプです。 それはどういう意味ですか?効率を無視vectorしても何でもできるようです。 誰かが私にvector実現可能なオプションではないlistが使用する必要があるシナリオを提供できますか?
238 c++  list  vector  stl 


2
unique_ptrをベクターにpush_backできないのはなぜですか?
このプログラムの何が問題になっていますか? #include &lt;memory&gt; #include &lt;vector&gt; int main() { std::vector&lt;std::unique_ptr&lt;int&gt;&gt; vec; int x(1); std::unique_ptr&lt;int&gt; ptr2x(&amp;x); vec.push_back(ptr2x); //This tiny command has a vicious error. return 0; } エラー: In file included from c:\mingw\bin\../lib/gcc/mingw32/4.5.0/include/c++/mingw32/bits/c++allocator.h:34:0, from c:\mingw\bin\../lib/gcc/mingw32/4.5.0/include/c++/bits/allocator.h:48, from c:\mingw\bin\../lib/gcc/mingw32/4.5.0/include/c++/memory:64, from main.cpp:6: c:\mingw\bin\../lib/gcc/mingw32/4.5.0/include/c++/bits/unique_ptr.h: In member function 'void __gnu_cxx::new_allocator&lt;_Tp&gt;::construct(_Tp*, const _Tp&amp;) [with _Tp = std::unique_ptr&lt;int&gt;, _Tp* …


15
C ++のソートとインデックスの追跡
C ++と、できれば標準ライブラリを使用して、サンプルのシーケンスを昇順で並べ替えたいが、新しいサンプルの元のインデックスも覚えておきたい。 たとえば、サンプルのセット、ベクトル、行列がありますA : [5, 2, 1, 4, 3]。これらをに並べ替えたい B : [1,2,3,4,5]が、値の元のインデックスも覚えておきたいので、次のような別のセットを取得できます。-これは C : [2, 1, 4, 3, 0 ]、元の「B」の各要素のインデックスに対応A '。 たとえば、Matlabでは次のことができます。 [a,b]=sort([5, 8, 7]) a = 5 7 8 b = 1 3 2 誰もがこれを行うための良い方法を見ることができますか?
216 c++  sorting  stl  indexing 

22
std :: vectorは単純な配列よりもはるかに遅いですか?
std::vector「配列として実装される」のは一般的な知恵だといつも思っていました。今日私は降りてそれをテストしました、そしてそうではないようです: テスト結果は次のとおりです。 UseArray completed in 2.619 seconds UseVector completed in 9.284 seconds UseVectorPushBack completed in 14.669 seconds The whole thing completed in 26.591 seconds これは約3〜4倍遅くなります。「vector数ナノ秒は遅くなるかもしれない」コメントを正当化しません。 そして私が使用したコード: #include &lt;cstdlib&gt; #include &lt;vector&gt; #include &lt;iostream&gt; #include &lt;string&gt; #include &lt;boost/date_time/posix_time/ptime.hpp&gt; #include &lt;boost/date_time/microsec_time_clock.hpp&gt; class TestTimer { public: TestTimer(const std::string &amp; name) : name(name), start(boost::date_time::microsec_clock&lt;boost::posix_time::ptime&gt;::local_time()) { …
212 c++  arrays  performance  stl  vector 

13
C ++ STLが非常にテンプレートに基づいているのはなぜですか?(*インターフェイス*ではありません)
つまり、必須の名前(標準テンプレートライブラリ)は別として... C ++は当初、OOPの概念をCに提示することを目的としていました。つまり、クラスとクラス階層に基づいて、特定のエンティティが(実行方法に関係なく)実行できることと実行できないことを区別できます。機能のいくつかの構成は、多重継承の問題と、C ++が(Javaなどと比較して)やや不格好な方法でインターフェースの概念をサポートしているという事実のために、この方法で説明することがより困難ですが、それはあります(そして改善された)。 そして、STLとともにテンプレートが登場しました。STLは、古典的なOOPの概念を取り入れ、代わりにテンプレートを使用してそれらをドレインに流しているように見えました。 テンプレートを使用してタイプを一般化する場合は、タイプテーマ自体がテンプレートの操作に無関係である場合(コンテナーなど)、ケースを区別する必要があります。持つvector&lt;int&gt;完璧な理にかなっています。 ただし、他の多くの場合(イテレーターとアルゴリズム)、テンプレート化された型は、概念の実際の詳細が完全にテンプレートの実装によって定義される「概念」(入力イテレーター、順方向イテレーターなど)に従う必要があります。テンプレートで使用されるタイプのクラスではなく、関数/クラス。これは、OOPの使用法とはやや反対です。 たとえば、関数に次のように伝えることができます。 void MyFunc(ForwardIterator&lt;...&gt; *I); 更新:元の質問では不明確だったので、ForwardIteratorをテンプレートにしてすべてのForwardIteratorタイプを許可しても問題ありません。逆に、ForwardIteratorをコンセプトとして使用しています。 は、その定義を見るだけでForward Iteratorを期待します。ここで、実装またはドキュメントのいずれかを調べる必要があります。 template &lt;typename Type&gt; void MyFunc(Type *I); テンプレートの使用に賛成できる2つの主張:コンパイルされたコードは、vtablesを使用する代わりに、使用された型ごとにテンプレートをカスタマイズしてコンパイルすることで、より効率的になります。また、テンプレートはネイティブタイプで使用できるという事実。 ただし、STLのテンプレート化を支持して古典的なOOPを放棄するより深い理由を探していますか?(ここまで読んだとすると:P)
211 c++  oop  templates  stl 



弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.