-1

背景を少し説明すると、Customer、Tours、Hires の 3 つのメイン クラスがあります。
Customer は、コンストラクターに顧客名、顧客 ID などの基本的な顧客データを持ちます。
GuidedTours の基本クラスである Tour にも同様のデータがあります。
Hires は、顧客がレンタルできる機器の詳細を持つクラスです。

主な質問

これらすべてのクラスのデータを大きなテキスト ファイルから読み取り、基本的にそれらをさまざまなデータ構造 Map、List、Vector に格納して、これらすべてのデータ構造のパフォーマンス バウンド チェックを行う必要があります。
だから私はそれが働いているのを見ることができますが、私を最も混乱させている部分は、さまざまなオブジェクトを初期化する方法です

1 メインから読み取る場合は、次のように行をトークン化します 。このメソッドでは、ツアーに「addtoMap」という関数を追加し、データ構造を実装します。main.cpp 側では、すべてのツアー ポインターをベクターに保存します。 . デフォルトの Tour() コンストラクターでデータ構造を初期化する必要がありますか。 そして、これは良いプログラミングの実践ですか?また、グラフィカルなプレゼンテーションと異なる構造間の偏差を示すことができるように、すべてのデータ構造に時間を費やす必要がありましたが、すべてのツアー、顧客、雇用ポインターを main.cpp に格納するためにベクターを使用します。パフォーマンスへの重大な影響。
Tour *newtour = new Tour();
newTour.addtoMap(tokenise, data, will, go, here);


2
Tour *newtour = new Tour(tokenised, data, goes, here);
このように次のようにすると、値をコンストラクターに渡すので、そのコンストラクターで Map 実装を実行する必要がありますが、これは良くないと感じます。
これについて他に方法はありますか?私はこの方法が好きですが、そのデータを保存するためにマップを実装する方法と場所を視覚化できませんか?

私はC ++を初めて使用します。そのようにする理由は、OOP方法論をサポートすることです。他に方法があれば、私はそれを受け入れます。

同様の問題を抱えた別のスレッドを見たことがありますが、彼は 3.8GB のデータ ファイルを持っていました。

4

3 に答える 3

1

コンテナーとデータ オブジェクトを分離する必要があります。必要なのは、データ オブジェクトの「単純な」データホルダー クラス、たとえば 1 つのCustomerクラスのようです。そして、これらのそれぞれについて、このクラスのオブジェクトを保持するコンテナーが必要になります。

などのSTL (標準テンプレート ライブラリ) コンテナーを使用するのが最適ですvector(またはmap、必要なものは何でも) vector<Customer>。これらのコンテナーは、リストの管理に関するすべての面倒な作業を行います。データ クラスを記述するだけで済みます。たとえば、次のようになります。

 class Customer
 {
 private:
     std::string m_name;
 public:
     Customer(std::string name): m_name(name) {}
 };

その後:

 std::string nameLoadedFromFile;
 Customer customer(nameLoadedFromFile);
 std::vector<Customer> custList.push_back(customer);
于 2013-10-08T07:03:51.407 に答える
-1

ポインターを使用することは、プログラミングの悪い習慣です。Tour ポインターのベクトルではなく、Tours のベクトルの何が問題になっていますか?

あなたの質問に対する私への答えは、ツアーをマップに追加する方法を変更することです。これは物事を行うための最も自然な方法のように見えます

Tour newtour(tokenised, data, goes, here); // no pointers
map.addTour(newtour);

したがって、Tour のメソッドとしての addtoMap の代わりに、マップ オブジェクトのメソッドとして addTour があります。

于 2013-10-08T07:02:58.383 に答える