2009-06-01 28 views
1

私はC + +でプログラムを書く宿題を与えられましたが、私たちは文字列クラスを使用することはできません。ただし、ストリングストリームを含むiostreamライブラリを使用することは許可されています。私は文字列を使用してクラスを構築したり、関数から戻るなど、stringstreamを使うことを考えていました。文字列の代わりにstringstreamを使用しますか? - C++

これは良い考えですか?私が知っておくべき落とし穴は何ですか?

+2

文字列ストリームから項目を取り出す唯一の方法は、文字列に変換することです。 – workmad3

+0

文字列クラスを使用できない理由がわからないので、この質問に答えるのは難しいです。代入のポイントは、文字列の代わりに別の標準クラスを使用する巧妙な方法を見つけることでしたか?あるいは、独自の文字列クラスを実装するはずですか? –

+0

多型に関する割り当てです。私たちは、製品とショッピングバスケットのリストを保存するショップデータベースを構築しています。彼らは私たちに文字列を使用させないことで、ちょっと気になります。 char *やcharの配列を格納する他の方法を使うと期待していると思います。しかし、私たちは自由に他の創造的な解決策を見つけ出すことができます。 – Meir

答えて

10

<の文字>を使用することもできます。それは文字列の良い代替手段です。スコット・マイヤーズは、彼の「効果的なSTL」の本で言うように:

第三に、文字列の代わりに、ベクトル 実装はとても隠し マルチスレッド性能、カウント 参照することが許可されていません> ベクトル<文字を使用することを検討してください問題が発生しないように が発生します。もちろん、あなたがベクトル<文字>に切り替え 場合 文字列の派手なメンバ関数を見送るが、機能は、とにかくSTLアルゴリズムを通じて 利用可能であるあなたがいるように がyou're、それほど 機能をあきらめること のほとんど他のもののために1つの シンタックスを取引する。

文字列ストリームを使用することによって発生する可能性のある主な問題は、厳密にはコンテナではないということです。私はそれがストリームでアルゴリズムと他の通常のSTLのものを使用することが可能かどうかはわかりません。

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 *のベクトルも機能します。

関連する問題