1

C++ でプログラムを作成する宿題を出されましたが、string クラスの使用は許可されていません。ただし、 stringstream を含むiostreamライブラリの使用は許可されています。クラスの構築や関数からの戻りなどに文字列を使用していた場所で、文字列ストリームを使用することを考えていました.

これはあなたにとって良い考えのように聞こえますか? 私が知っておくべき落とし穴はありますか?

4

2 に答える 2

10

vector<char> を使用することもできます。これは、文字列の優れた代替手段です。Scott Meyers が著書「Effective STL」で次のように述べています。

3 番目に、文字列の代わりに vector<char> を使用することを検討してください。ベクトルの実装は参照カウントが許可されていないため、隠れたマルチスレッド パフォーマンスの問題は発生しません。もちろん、vector<char> に切り替えると文字列のファンシーなメンバー関数を忘れてしまいますが、その機能のほとんどはとにかく STL アルゴリズムを介して利用できるため、ある構文を別の構文と交換するほど機能を放棄することはありません。

stringstream を使用することで発生する可能性のある主な問題は、厳密にはコンテナーではないということだと思います。ストリームでアルゴリズムやその他の通常の STL を使用できるかどうかはわかりません。

于 2009-06-01T06:56:41.600 に答える
0

状況が文字列のないショップ データベースの場合は、単純に列挙型を使用できます。

enum {
     Prod1,
     Prod2,
     Prod3
};

つまり、整数を識別子として渡すだけで、switch ステートメントを使用して印刷機能を使用できます。

void PrintProd(int product) {
    switch(product) {
         case Prod1: 
              cout << "Product 1" << endl;
              break;
         case Prod2:
              cout << "Product 2" << endl;
              break;
     // etc.
     }
}

これにより、多くの問題を回避できます。ヒープを処理することを気にしない場合は、製品名を id をベクトルへのインデックスとして割り当てる char* のベクトルも機能します。

于 2009-08-19T00:37:40.353 に答える