問題タブ [standard-library]
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++ - std::ifstreamクラスの設計
STLの美しさを見た人は、可能な限りSTLを使用しようとします。また、生のポインターと配列を使用して、STLを見るところならどこでも使用するように勧めます。Scott Meyersは、STLに関する本全体をEffectiveSTLというタイトルで書いています。ifstream
しかし、彼らが好んchar*
だ開発者に何が起こったのかstd::string
。の最初のパラメータが。ではなくifstream::open()
タイプであるのはなぜだろうか。その署名を見てください:const char*
const std::string &
なぜこれ?なぜこれではないのですか?
これはデザインの重大な間違いですか?それとも、このデザインは意図的なものですか?理由は何でしょうか?char*
彼らがよりも好んだ理由はわかりませんstd::string
。char*
をとる後者の関数に渡すことができることに注意してくださいstd::string
。問題ない!
ちなみに、これifstream
はtypedefであることを認識しているので、私のタイトルについてのコメントはありません。短く見えるので使ってみました。
実際のクラステンプレートは次のとおりです。
c++ - std::string の実装におけるこの最適化は許可されますか?
の実装を考えていたところですstd::string::substr
。それは新しいオブジェクトを返しますがstd::string
、これは私には少し無駄に思えます。元の文字列の内容を参照し、暗黙的に に代入できるオブジェクトを返さないのはなぜstd::string
ですか? 実際のコピーの一種の怠惰な評価。このようなクラスは次のようになります。
このクラスのパブリック インターフェイスは、実際の のすべての読み取り専用操作を模倣するstd::string
ため、シームレスに使用できます。std::string
次に、を受け取る新しいコンストラクターを持つことができるstring_ref
ため、ユーザーは決して賢明ではありません。結果を「保存」しようとすると、コピーが作成されるため、参照がデータを指し、その背後で変更されても、実際の問題はありません。
アイデアは、次のようなコードです。
合計で 2 つ以下のstd::string
オブジェクトが構築されます。これは、多くの文字列操作を実行するコードにとって便利な最適化のようです。もちろん、これは だけに適用されるのではなくstd::string
、その内容のサブセットを返すことができるすべての型に適用されます。
私の知る限り、これを行う実装はありません。
質問の核心は次のとおりだと思います。
必要に応じて暗黙的に に変換できるクラスが与えられた場合std::string
、ライブラリ作成者がメンバーのプロトタイプを戻り値の型に変更することは標準に準拠していますか? または、より一般的には、ライブラリの作成者は、これらのタイプのケースで、最適化として通常のオブジェクトの代わりに「プロキシ オブジェクト」を返す余裕がありますか?
私の直感では、これは許可されておらず、プロトタイプは正確に一致する必要があります。戻り値の型だけでオーバーロードできないことを考えると、ライブラリの作成者がこれらのタイプの状況を利用する余地はありません。私が言ったように、答えはノーだと思いますが、私は尋ねると思いました:-)。
python - 標準ライブラリを使用してPythonでウォールタイムを取得しますか?
標準ライブラリを使用してPythonでウォールタイムを取得するにはどうすればよいですか?
この質問 とこのclock_gettime(CLOCK_MONOTONIC_RAW)
質問 は、Linuxに似ているか/proc/uptime
、最も適切であることを示唆しています。Windows ではtime.clock()
、目的の効果があります。
を使用しますが、関数は単調に(そして直線的に) 増加する時間値time.time()
を返すことが保証されていません。
java - ファイルから byte[] を読み書きする
ファイルからバイト[]を書き込んでロードするための単純なもの(外部ライブラリがないことが望ましい)を探しています。多かれ少なかれ [Python のピクルス][1] のようなものです。
問題は、そのようなファイルからオブジェクト構造を読み取れないことです。さらに、16 進エディタでは、ファイル「somebytes」には 2 つまたは 0 しか含まれていません。そのため、FileOutputStream がコンテンツ (「t」またはバイトに相当するもの) をそれに入れているようには見えません。
java - JavaでデフォルトのStringクラスをカスタムクラスに置き換える
独自のStringクラスを実装し、二重引用符を使用しているときにJavaで使用できるようにしたいと思います。
次のようにMyString s = "foo"
なります。java.lang.Stringはインスタンス化されません。
コンパイラに触れることなくそれは可能ですか?
それはどのように行われますか?
私が尋ねている理由は、最悪の場合の実行時間について検証する必要があるプログラムに文字列が必要だからです。それを検証するには、すべてのループを制限する必要があります(制限はコメントで指定されます)。MyString s = new MyString({'f','o','o'})
さらに、書くと読みやすさが大幅に低下するため、便宜上二重引用符を使用できるようにしたいと思います。
python - Python 標準モジュールにこの関数の類似物はありますか?
次の手書き関数と同等の標準関数 (演算子、デコレータ) を探しています。
ありがとう!
c++ - 標準ライブラリ (STL) コンテナーは、非スロー割り当ての形式をサポートしていますか?
オペレーター (PODのnew
場合は malloc/calloc) は、大量のメモリ チャンクを割り当てるときに、シンプルで効率的な形式の失敗をサポートします。
これがあるとしましょう:
std::containers にそのような構造はありますか、それとも友達と (予想される!!) 例外を常に処理する必要がstd::vector
ありますか?
メモリを事前に割り当てるカスタム アロケータを作成し、このカスタム アロケータをベクトルに渡す方法があるのではないでしょうか。そのため、事前にアロケータに入れるよりも多くのメモリをベクトルが要求しない限り、失敗しません。 ?
後付け: 本当に必要なのはbool std::vector::reserve(std::nothrow) {...}
、通常の予約関数に加えてメンバー関数です。しかし、アロケーターが拡張されて nothrow 割り当てが可能になった場合にのみ意味があるため、それは起こりません。結局、(nothrow)新しいものは何かに適しているようです:-)
編集:なぜ私がこれを求めているのかについて:
デバッグ中にこの質問について考えました (デバッガーの 1 回目のチャンス / 2 回目のチャンスの例外処理):また、すでに十分に予測され、コードで処理されている bad_alloc 例外もキャッチしました。それはそれほど大きな問題ではありませんでしたが、例外は例外的な状況のためのものであり、コード内のすべての奇妙な呼び出しが例外的ではないことをすでに期待しているという説教が行われていることに気づきました。
正当な用途がある場合new (nothrow)
は、 vector-notrow-reserve にもあります。
go - 良い例標準ライブラリを使用したGoコード
新しい言語を習得する上で私にとってかなり厄介なことの1つは、標準ライブラリです。それは大きいですか?何が入っていますか?どのくらいの頻度で使用されますか?どのような規則を使用していますか?
GoチュートリアルとEffectiveGoを読んでいますが、完全な(ただしそれほど複雑ではない)プログラムの慣用的なサンプルコードを見て、Goの標準ライブラリをどのように利用しているかを確認したいと思います。
共有したいサンプルプロジェクトがある場合、または勉強するのに適したプロジェクトを知っている場合は、それをいただければ幸いです。
c++ - 標準コンテナを返却すると、コンテナの内容のコピーが発生しますか?
STL コンテナーを返す関数がある場合、標準コンテナーの内容全体のコピーが発生しますか?
例:
これより良い:
容器に何が入っているかは重要ですか?たとえば、次のようなコンテナーを返します。
これよりもコストのかかる操作になります。
ありがとう、ポールH
編集: これはC ++ 03を使用しています。残念ながら、C++0x ソリューションは受け入れられません。
Edit2: Microsoft Visual Studio 2008 コンパイラを使用しています。
c++ - ofstream でフラッシュが必要なのはなぜですか?
次のコードを実行すると、ファイルはまったく作成されません。
ただし、閉じる前に flush() を追加すると、機能します。
標準ライブラリは実際にこれを必要としますか?それとも Visual C++ CRT のバグですか?