2017-06-10 12 views
0

私は何らかの種類のスケジュールを作成するアプリケーションを書いています。通常、私はMatlabやPythonのような言語で開発します。この新しいアプリケーションは非常に計算量が多く、現在のMatlabバージョンがありますが、1つのインスタンスを実行するには数分から数時間かかることがあります。したがって、私はC++を使って書き直したいと思います。これはC++でポインタを使う良い方法ですか?

私はこの概念に慣れていないので、ポインタに関する基本的な質問をしたいだけです。

非常に単純にして、タイムスケジュールを作成するプログラムを作成したいとしましょう。したがって、私は、クラス "人" "部屋" "スケジュール"と "会議"を書く。 私の計画は、いくつかの会議からなるスケジュールを作成することです。さらに、会議を特定の部屋や人にリンクしたいと思っています。 3人のA BとCと2人の部屋r1とr2を作成したとしましょう。ここでは、m1、m2、m3の3つの会議からなるスケジュールを作成したいと考えています。

今、この情報をリンクする最も良い方法は?たとえば、私はm1を選んで、どの部屋を使用しているのか、どの人が参加しているのかを見たいと思っています。しかし、私はまた、人物Aを選んで彼の会合を見たり、部屋r1を選んでそこで会合が開催されるのを見たいと思っています。非常に大きな「会議」オブジェクトをたくさん作成するので、すべてのオブジェクトをすべての場所に単純にコピーしたくありません。 (私の実際のアプリケーションでは、オブジェクトあたり約100個の属性があり、実際には多くの "会議"オブジェクトを作成します)

通常、言語が異なると、すべてのIDにidを与えてからid異なるクラスの各会議または個人の私のアイデアは、C++の本を読んだ後、ポインタを使うことですが、私が望むように使えるかどうかはわかりません。私の計画は、私の人物オブジェクトと私の部屋オブジェクトを作成し、私の会議を作成し、すべての参加ミーティングからなる各人物と部屋のオブジェクトのポインタのベクトルを使用することです。そして、各会議は、いくつかの一般的な属性と、参加する人へのポインタのベクトルと、部屋へのポインタとからなる。アイデアは、このように私は常にIDを比較する必要はなく、私は情報に直接リンクしているということです。

しかし、私は本当にこれが良い方法かどうか分かりません。すべてのIDにIDを与え、IDを保存する方がいいですか。会議m1にID 100があり、すべての会議が保存されています。ベクトルであり、人物Aが100に参加していて、100の会議に関する情報を取得したい場合は、会議のベクトルを通過してすべてのIDを比較するだけです。 (または地図を使用する可能性が高い)。 m1に出席する各人を見たいと思っても同じことをしてください。 私が読んでいる本では、可能ならばあなたはポインタを避けるべきだと言っています...例えばスマートポインタを使用すると、これは本当ですか?

あなたの助けのおかげで、私はCに、むしろ新たなんだということを忘れないでください++このmeansIは実際にコードをシンプルにしたい(私はたとえば、データベースを使用する方法は考えている)

+3

シンプルなコードを書き、アイデアをテストしてください。コーディングを行うときに、C++がどのようにしてコンセプトを表現するのかがわかります。 –

+2

なぜ生ポインタを使用していますか? 'std :: shared '、' std :: unique_ptr'などありましたか? –

+0

これは私の質問です。この目的のためにスマートポインタを使用するのは良い考えですか? – user7431005

答えて

-3

あなたが」スケジューリングプログラムを書いて、私は宣言的な言葉を使用することをお勧めします。スケジューリングは複雑で、コンピュータに作業をさせるほうがずっと良いです。これにより、プログラムの作成が容易になるばかりでなく、プログラムが小さくなります。

+0

「宣言的言語」とまったく同じ意味ですか?はい、私は同意します、それは私がそれをプログラムしたい理由は非常に複雑です。私の例はとても簡単でした。私の実際のアプリケーションでは、多くの異なるステーションの観測時間をスケジュールし、これを最適化する必要があります。これははるかに複雑です。現時点では、いくつかの10k行のコードからなるMATLABコードがあります。 – user7431005

+0

宣言型プログラミングとは、コンピュータに真実と虚偽を伝え、コンピュータが1つ以上の可能な解決策で応答する場所です。 たとえば、SQLは宣言型言語です。あなたは真実(あなたが照会しているもの)を教え、それはあなたの照会に可能なすべての解決策を答えました。 時間割設定プログラムの場合、時間割の各要素について真実を伝えることができます(例えば、あなたの部屋や能力など)、虚偽であることを伝えることができます(たとえば、同時に使用されます)。 –

+0

いいえ、そうではありません。何かを宣言することは、「私はこれをすることができる」と言います。 –

4

TL; DR

++ Cとをポインタを使用するための最良の方法smart pointersまたはcontainersを使用することです。

通常、生ポインタを使用する必要はなく、メモリ割り当てを自分で管理する必要はありません。

+1

C++で生ポインタを使う理由はたくさんあります。スマートポインタは、**所有している**生ポインタを置き換えることのみを目的としています。 –

+0

@ manni66あなた自身の答えでそれを具体化するかもしれません。 –

関連する問題