-6

私は Python/Scala/Haskell コーダーで、C++ を学ぼうとしていますが、C++ のメソッドやクラスの名前の多くが意味をなさないため、何かを覚えるのに苦労しています。これはおそらく、彼らが実際に何をしようとしているのかを理解していないためです。誰でも私のためにこれらを説明できますか:

  1. vector-ベクトルは、リストまたは一連のものと呼ぶのは非常に奇妙なものです。ベクトルする理由
  2. unordered_set- 単純に ではないのはなぜsetですか? セットの注文はいつからですか?暗黙的に設定されていないということは、順序が重要ではないことを意味し、代わりに順序付けられたバージョン (Java の TreeSets) を明示的に呼び出す必要がありますordered_setか??
  3. vector.cend- cend とはどういう意味ですか? 英語の辞書に cend が見つかりませんでしたか? それを単に終わりと呼ばないのはなぜですか?
  4. emplace- emplace とはどういう意味ですか? 「挿入」という言葉の方が適切ではないでしょうか。
  5. push_backpush-またはを単純に呼び出さないのはなぜappendですか? 「後ろ」の部分は暗黙的ではありませんか?
  6. なぜempty()ブール値を返すのですか? そうではないisEmpty()でしょうか?
  7. また、.begin().end()は矛盾しているようです。begin()は動詞end()ですが、この文脈では名詞です。begin は何かを開始することを示しますが、単に開始へのポインターを返すだけです。start名詞であり、「end」またはbeginning少なくとも代わりにうまくいくメソッドを呼び出すべきではありませんbegin
  8. また、list.unique私が思っていることはまったくしません -連続した類似アイテムをチョップするだけです!?! (最小の驚きの原則の大きな違反)-おかしなことに、追加のハッシュセットを使用して、線形実行時間でも一意に正しく行うことができます

他にもたくさんありますが、上記を理解すれば、C++ の学習がより簡単になるかもしれません。ありがとう!

4

4 に答える 4

2

C++ では、命名戦略が他の言語とはかなり異なります。しかし、あなたが言及したように、関数の名前は、haspush_backのような一部のコンテナーにあるという理由だけでした (これは両端のコントレーナーです)。また、 の代わりにコンテナーを空にするなどの関数を使用します。また、C++ では、セット コンテナーは順序付けられます。平均で O(nlogn) 回の要素を並べ替えます。dequepush_frontclearempty

于 2013-03-17T11:01:54.507 に答える
1
  1. vector:このパッケージのように、関数型言語にもベクトルがあります
  2. unordered_set- Unordered/ordered は、基礎となる実装を指します。要素が実際にどのように格納されているか。
  3. vector.cend-cendは、末尾を指す定数反復子です。定数反復子では、反復子が指す値を変更できません。
  4. emplace- Emplace は、オブジェクトを「その場で」作成する点を除いて、insert に似ています。オブジェクトのコンストラクターに渡すパラメーターを emplace に渡します。
  5. push_back- これは、統一されたインターフェースを維持するためです。std::list のような一部のコンテナでは、push_front を使用できます
  6. なぜempty()ブール値を返すのですか? すべきではないisEmpty()か?: すべきか? 誰が言ったのですか?あなたは Python/Scala/Haskell に慣れていますが、それが唯一の真の方法ではありません。
  7. また、.begin().end()は矛盾しているようです。begin()は動詞end()ですが、この文脈では名詞です。begin は何かを開始することを示しますが、単に開始へのポインターを返すだけです。startどちらが名詞であり、「end」またはbeginning少なくとも : の代わりにうまくいくメソッドを呼び出すべきではありませんかbegin。これはささいな不満のようです。それはまさにその通りです。
  8. なぜlist.uniqueを返さないのsetですか? データ構造を変更するだけでなく (関数の世界から来て、副作用としてデータを変更するのは本当に奇妙に思えます)、C++ には既にセットがあるため、ここでは二重に奇妙に思えます。私の理解はunique間違っていますか??: 副作用がないという考え方を C++ に持ち込むと、多くのことが奇妙になります。Python/Scala/Haskell を学ぶことを可能にしたのと同じオープン マインドを C++ に適用する必要があります。list.uniqueは Ruby の に似ていArray#uniqます。ドキュメントから:

要素は、直前の要素と比較して等しい場合にのみ、リスト コンテナーから削除されることに注意してください。したがって、この関数はソートされたリストに特に役立ちます。

説明したように、セットを返すと、連続していない場合に重複が保持されないため、情報が失われます。

私が言ったように、C++ の学習に真剣に取り組んでいる場合は、これらの言語/ライブラリ設計の決定に対処する必要があります。これらの点の多くは、私にはささいな不満のように思えます。中には「そのまま」のものもあります。C++ のいくつかのことは正気ではありませんが、C++ に真剣に取り組んでいる場合はどうしますか? 確かに、たとえば Haskell は「自然に従う」より単純な設計をしているように見えますが、それは別の種類の言語です。うまくいけば、これを乗り越えることができます。

于 2013-03-17T11:07:50.630 に答える