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

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


6
関数から「ベクター」を返すのはなぜですか?
このコードを検討してください。このタイプのコードを何度か見ました。wordsローカルベクトルです。関数から返すにはどうすればよいですか? 死なないことを保証できますか? std::vector<std::string> read_file(const std::string& path) { std::ifstream file("E:\\names.txt"); if (!file.is_open()) { std::cerr << "Unable to open file" << "\n"; std::exit(-1); } std::vector<string> words;//this vector will be returned std::string token; while (std::getline(file, token, ',')) { words.push_back(token); } return words; }

4
DLLとの間でオブジェクト、特にSTLオブジェクトを安全に渡すにはどうすればよいですか?
C ++ DLLとの間でクラスオブジェクト、特にSTLオブジェクトを渡すにはどうすればよいですか? 私のアプリケーションはDLLファイルの形式でサードパーティのプラグインとやり取りする必要があり、これらのプラグインがどのコンパイラでビルドされるかを制御できません。STLオブジェクトの保証されたABIがないことを承知しており、アプリケーションを不安定にすることを心配しています。
106 c++  windows  dll  stl  abi 

9
「便利な」C ++バイナリ検索アルゴリズムはどこで入手できますか?
std::binary_search標準ライブラリの<algorithm>ヘッダーのようなC ++ STLコンテナーと互換性のあるバイナリ検索アルゴリズムが必要ですが、要素が存在するかどうかを示す単純なブール値ではなく、結果を指すイテレーターを返す必要があります。 (補足として、binary_searchのAPIを定義したとき、標準委員会は一体何を考えていましたか?) ここでの主な懸念は、バイナリ検索の速度が必要であることです。そのため、以下で説明するように、他のアルゴリズムでデータを見つけることができますが、データがソートされているという事実を利用して、バイナリの利点を得たいと思います。線形検索ではなく検索。 これまでlower_boundとupper_boundデータが欠落している場合失敗します。 //lousy pseudo code vector(1,2,3,4,6,7,8,9,0) //notice no 5 iter = lower_bound_or_upper_bound(start,end,5) iter != 5 && iter !=end //not returning end as usual, instead it'll return 4 or 6 注:コンテナーと互換性がある限り、std名前空間に属さないアルゴリズムを使用しても問題ありません。同様に、言いますboost::binary_search。

5
カスタムstd :: setコンパレーターの使用
OverаэтотвопросестьответынаStack Overflowнарусском:Компаратордляset 整数のセット内のアイテムのデフォルトの順序を数値ではなく辞書式に変更しようとしています。次のものをg ++でコンパイルすることはできません。 file.cpp: bool lex_compare(const int64_t &a, const int64_t &b) { stringstream s1,s2; s1 << a; s2 << b; return s1.str() < s2.str(); } void foo() { set<int64_t, lex_compare> s; s.insert(1); ... } 次のエラーが発生します。 error: type/value mismatch at argument 2 in template parameter list for ‘template<class _Key, class …
105 c++  stl 

10
std :: setに「contains」メンバー関数がないのはなぜですか?
私は頻繁に使用してstd::set<int>おり、そのようなセットに数値が含まれているかどうかを確認する必要があるだけです。 私は書くのが自然だと思います: if (myset.contains(number)) ... しかし、containsメンバーがいないため、面倒なことを書く必要があります。 if (myset.find(number) != myset.end()) .. またはそれほど明白ではない: if (myset.count(element) > 0) .. この設計決定の理由はありますか?
103 c++  stl  stdset 

2
標準C ++ライブラリに含まれる例外クラス
標準C ++ライブラリに含まれている例外クラスとは何ですか?それらは何に使用する必要がありますか?私はいくつかの新しいC ++ 11例外があることを知っていますが、それらが何であるか、またはどこにあるのかわかりません。
102 c++  exception  c++11  stl 

6
文字列c_str()とdata()
c_str()とdata()(STLと他の実装での)の違いは、c_str()常にnullで終了するが、そうdata()でない場合があることをいくつか読んだことがあります。私が実際の実装で見た限りでは、それらは同じことをするか、data()呼び出しますc_str()。 ここで何が欠けていますか?どのシナリオで使用する方が正しいですか?
102 c++  stl  c-str 

6
STLコンテナをフィルタリングする最新の方法は?
何年にもわたるC#の後でC ++に戻ると、配列をフィルタリングする最新の-読み取り:C ++ 11-方法はどうなるのか、つまり、このLinqクエリに似たものをどのように実現できるのか疑問に思いました。 var filteredElements = elements.Where(elm => elm.filterProperty == true); 要素のベクトルをフィルタリングするために(stringsこの質問のために)? 明示的なメソッドを定義boost::filter_iteratorする必要がある古いSTLスタイルのアルゴリズム(またはのような拡張機能)が今では置き換えられることを心から願っていますか?
102 c++  c++11  stl 

5
ベクトルから要素を消去する
消去メソッドを使用してベクトルから要素をクリアしたいのですが。しかし、ここでの問題は、要素がベクトル内で1回だけ発生することが保証されていないことです。それは複数回存在する可能性があり、それらをすべてクリアする必要があります。私のコードは次のようなものです: void erase(std::vector<int>& myNumbers_in, int number_in) { std::vector<int>::iterator iter = myNumbers_in.begin(); std::vector<int>::iterator endIter = myNumbers_in.end(); for(; iter != endIter; ++iter) { if(*iter == number_in) { myNumbers_in.erase(iter); } } } int main(int argc, char* argv[]) { std::vector<int> myNmbers; for(int i = 0; i < 2; ++i) { myNmbers.push_back(i); myNmbers.push_back(i); } erase(myNmbers, …
101 c++  vector  stl  erase 

3
gcc std :: unordered_mapの実装は遅いですか?もしそうなら-なぜですか?
私たちは、C ++で高性能の重要なソフトウェアを開発しています。そこで、並行ハッシュマップが必要で、それを実装しました。そこで、並行ハッシュマップがと比較してどれほど遅いかを把握するためのベンチマークを作成しましたstd::unordered_map。 しかし、std::unordered_map信じられないほど遅いようです...だから、これは私たちのマイクロベンチマークです(並行マップでは、ロックが最適化されないことを確認するために新しいスレッドを生成し、私も0を挿入しないことに注意してくださいgoogle::dense_hash_map。 null値が必要です): boost::random::mt19937 rng; boost::random::uniform_int_distribution<> dist(std::numeric_limits<uint64_t>::min(), std::numeric_limits<uint64_t>::max()); std::vector<uint64_t> vec(SIZE); for (int i = 0; i < SIZE; ++i) { uint64_t val = 0; while (val == 0) { val = dist(rng); } vec[i] = val; } std::unordered_map<int, long double> map; auto begin = std::chrono::high_resolution_clock::now(); for (int i = …

4
C ++ constマップ要素へのアクセス
operator []を使用してconst C ++マップの要素にアクセスしようとしましたが、このメソッドは失敗しました。また、 "at()"を使用して同じことを試みました。今回はうまくいきました。ただし、 "at()"を使用してconst C ++マップの要素にアクセスする方法についての参照は見つかりませんでした。「at()」はC ++マップに新しく追加された関数ですか?これに関する詳細情報はどこにありますか?どうもありがとうございました! 例は次のとおりです。 #include <iostream> #include <map> using namespace std; int main() { map<int, char> A; A[1] = 'b'; A[3] = 'c'; const map<int, char> B = A; cout << B.at(3) << endl; // it works cout << B[3] << endl; // it …
100 c++  stl  map  const 

2
C ++ 20でstd :: ssize()が導入されたのはなぜですか?
C ++ 20std::ssize()は以下のように無料関数を導入しました: template <class C> constexpr auto ssize(const C& c) -> std::common_type_t<std::ptrdiff_t, std::make_signed_t<decltype(c.size())>>; 可能な実装はcl ass Cのメンバー関数のstatic_cast戻り値を対応する符号付きに変換するためにを使用しているようです。size() size()C のメンバー関数は常に非負の値を返すので、なぜ誰かがそれらを符号付き変数に格納したいのでしょうか?本当に望んでいる場合、それは単純な問題ですstatic_cast。 なぜstd::ssize()C ++ 20で導入されたのですか?
99 c++  stl  unsigned  signed  c++20 

6
vector <bool>がSTLコンテナではないのはなぜですか?
スコットマイヤーズの本の効果的なSTLの項目18 :標準テンプレートライブラリの使用を改善するための50の特定の方法vector &lt;bool&gt;は、STLコンテナではなく、実際にはboolsを保持しないため、避けるようにと言っています。 次のコード: vector &lt;bool&gt; v; bool *pb =&amp;v[0]; コンパイルされず、STLコンテナの要件に違反します。 エラー: cannot convert 'std::vector&lt;bool&gt;::reference* {aka std::_Bit_reference*}' to 'bool*' in initialization vector&lt;T&gt;::operator []戻り値の型はであるはずですがT&amp;、なぜそれがvector&lt;bool&gt;ですか? なに vector&lt;bool&gt;実際には構成されていますか? アイテムはさらに言う: deque&lt;bool&gt; v; // is a STL container and it really contains bools これをの代替として使用できますvector&lt;bool&gt;か? 誰もがこれを説明できますか?


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