2017-06-10 5 views
0

Ich möchte eine Anwendung schreiben, um eine Art von Zeitplänen zu erstellen. Normalerweise entwickle ich in Sprachen wie Matlab oder Python. Diese neue Anwendung wird sehr rechenintensiv sein, wir haben eine aktuelle Matlab-Version, aber es dauert einige Minuten bis Stunden, um eine Instanz auszuführen. Daher möchte ich es mit C++ umschreiben.ist dies eine gute Möglichkeit, Zeiger in C++ zu verwenden?

Ich möchte nur eine grundlegende Frage zu Zeigern stellen, weil ich mit diesem Konzept nicht so vertraut bin.

Lassen Sie uns es sehr einfach halten und sagen, ich möchte ein Programm erstellen, um Zeitpläne zu erstellen. Deshalb schreibe ich eine Klasse "Person" "Raum" "Zeitplan" und "Besprechung". Mein Plan ist es, einen Zeitplan zu erstellen, der aus mehreren Besprechungen besteht. Zusätzlich möchte ich die Treffen mit bestimmten Räumen und Personen verknüpfen. Nehmen wir an, ich habe 3 Personen A B und C und zwei Zimmer R 1 und R 2 erstellt. Jetzt möchte ich einen Zeitplan erstellen, der aus drei Sitzungen besteht: m1, m2 und m3.

Was ist jetzt der beste Weg, um alle diese Informationen zu verknüpfen? Zum Beispiel möchte ich in der Lage sein, m1 auszuwählen und zu sehen, welchen Raum es nutzt und welche Personen daran teilnehmen. Aber ich möchte auch in der Lage sein, Person A auszuwählen und zu sehen, welche Besprechungen er hat, oder Raum R1 auszuwählen und nachzusehen, welche Besprechungen dort stattfinden werden. Ich möchte nicht einfach alle Objekte an alle Orte kopieren, weil ich viele "Meeting" -Objekte erstellen werde, die sehr groß sind. (In meiner realen Anwendung werde ich ~ 100 Attribute pro Objekt haben, und ich werde wirklich viele "Meeting" -Objekte erstellen)

Normalerweise, mit verschiedenen Sprachen, würde ich einfach alles eine ID geben und dann nur die ID speichern von jedem Treffen oder jeder Person in den verschiedenen Klassen. Meine Idee ist jetzt nach dem Lesen einiger C++ - Bücher, Zeiger zu verwenden, aber ich weiß nicht, ob ich sie so benutzen kann, wie ich es wollte. Mein Plan ist, mein persönliches Objekt und mein Raumobjekt zu erstellen und dann meine Meetings zu erstellen und einen Vektor von Zeigern in jeder Person und jedem Raumobjekt zu verwenden, das aus allen teilnehmenden Meetings besteht. Und jedes Treffen besteht aus einigen allgemeinen Attributen und einem Vektor von Zeigern zu den teilnehmenden Personen und einem Zeiger auf den Raum. Die Idee ist, dass ich auf diese Weise nicht immer die IDs vergleichen muss und ich eine direkte Verbindung zu den Informationen habe.

Aber ich bin mir wirklich nicht sicher, ob es eine gute Idee ist, es so zu machen, oder ist es besser, einfach alles eine id zu geben und die IDs zu speichern, wie Meeting m1 hat ID 100 und alle Meetings werden gespeichert ein Vektor und wenn Person A am Treffen 100 teilnimmt und ich Informationen über Treffen 100 erhalten möchte, gehe einfach durch den Vektor von Treffen und vergleiche alle IDs. (Oder eher eine Karte verwenden). Und tue das gleiche, wenn ich sehen möchte, dass alle Leute am Treffen teilnehmen. In dem Buch, das ich lese, sagt der Autor, dass Sie Zeiger möglichst vermeiden sollten ... Stimmt das auch, wenn ich zum Beispiel intelligente Zeiger verwende?

Dank für Ihre Hilfe und vergessen Sie nicht, dass ich zu C ziemlich neu bin ++ diese meansI wirklich will, um den Code einfach zu halten (Ich habe keine Ahnung, wie eine Datenbank zum Beispiel verwenden)

+3

Schreiben Sie einen einfachen Code und testen Sie Ihre Ideen.Sie werden sehen, wie C++ Ihre Konzepte am besten darstellen kann, wenn Sie etwas programmieren. –

+2

Warum verwenden Sie rohe Zeiger? Sie hatten 'std :: shared ',' std :: unique_ptr', usw.? –

+0

Das ist meine Frage, ist es eine gute Idee, intelligente Zeiger für diesen Zweck zu verwenden? – user7431005

Antwort

-3

Wenn Sie‘ Um ein Scheduling-Programm zu schreiben, würde ich eine deklarative Sprache empfehlen. Die Planung ist kompliziert und es ist viel besser, wenn der Computer die Arbeit macht. Dies erleichtert nicht nur das Programmieren, sondern macht die Programme winzig.

+0

Was genau meinst du mit "deklarative Sprache"? Ja, ich stimme zu, es ist sehr kompliziert, deshalb möchte ich es programmieren. Mein Beispiel war sehr einfach. Meine reale Anwendung muss die Beobachtungszeiten vieler Stationen einplanen und optimieren, was sehr viel komplexer ist. Im Moment haben wir einen MATLAB-Code, der aus mehreren 10k Codezeilen besteht. – user7431005

+0

Deklarative Programmierung ist, wo Sie dem Computer sagen, was wahr und was falsch ist, und Computer reagiert mit 1 oder mehr möglichen Lösungen. Zum Beispiel ist SQL eine deklarative Sprache. Sie sagen es, was wahr ist (was Sie abfragen) und es hat mit allen möglichen Lösungen auf Ihre Frage geantwortet. Für ein Zeitplan Programm können Sie ihm Wahrheiten über jedes Element Ihres Stundenplans sagen (zum Beispiel, welche Zimmer Sie haben, ihre Kapazität, usw.) und Sie sagen, was falsch ist (zum Beispiel kann es nicht wahr sein, dass ein Zimmer wird mehr als einmal gleichzeitig benutzt). –

+0

Nein, ist es nicht. Etwas zu sagen heißt "Ich kann das". –

4

TL; DR

Der beste Weg, auf Zeiger mit C++ zu verwenden, ist smart pointers oder containers zu verwenden.

Normalerweise ist es nicht notwendig, rohe Zeiger zu verwenden oder die Speicherzuordnung selbst zu verwalten.

+1

Es gibt viele Gründe, rohe Zeiger in C++ zu verwenden. Intelligente Zeiger sollen nur rohe Zeiger ** ersetzen. –

+0

@ manni66 Sie können das in Ihrer eigenen Antwort bitte ausarbeiten. –

Verwandte Themen