Problem mit Array Übergabe



  • Hallo,

    könnte mir jemand bei meinem Problem helfen?Ich wäre sehr dankbar, ich bin neu in C++, ich hatte einbisschen in Python programmiert, aber mit C++ komme überhaupt nicht klar.
    Mein Problem ist: Ich habe eine Methode double* sinuss(), es sollte ein Array mit 15 elementen zurückgeben. Und dazu muss ich noch eine Methode schreiben, die kleinste Element aber nicht kleiner als 0 mit binaerer Suche zurückgibt.

    So sieht mein Code aus:

    #include <cmath>
       #include <cstddef>
       #include <iostream>
    
       int const kArrSiz = 15;
    
       // OBS: caller assumes ownership of array pointer!
       // Must be deleted with "delete [] foobar;"
       double* sinuss() {
           double* i_array = new double[kArrSiz];
    
           for (int i = 0; i < kArrSiz; ++i) {
    
               i_array[i] = std::sin((M_PI * (i - 7)) / kArrSiz);
               std::cout << i_array[i] << ' ';
           }
           std::cout << '\n';
           return i_array;
       }
    
       int main() {
           double* x = sinuss();
           for (int i  = 0; i < kArrSiz; ++i) {
               std::cout << x[i] << ' ';
           }
           std::cout << '\n';
           delete [] x;
           return 0;
       }
    

    Wie könnte ich dieses Array für meine nächste Aufgabe übernehmen(oder wie könnte ich es machen)? Ich kann wie der Code in Python funktioniert und habe es in Python geschrieben, funktioniert richtig, aber C++:(((
    Und ich bin mir nicht sicher, ob meine Methode double* sinuss() ein Array zurückgibt oder nur einzelne Elemente, ich verstehe nicht ganz, eigentlich sollte ein Array zurückgeben..



  • Es bleibt bei: benutze std::vector.



  • Nach das obligatorische geklärt ist ...

    Wie könnte ich dieses Array für meine nächste Aufgabe übernehmen

    Dazu kann man außer "na einfach so" nicht so viel sagen.

    ich bin mir nicht sicher, ob meine Methode double* sinuss() ein Array zurückgibt oder nur einzelne Elemente

    Einen Zeiger, der auf der erste Element eines Arrays zeigt.



  • @sanjarbekova Wenn du, gerade als Anfänger, mit new/delete arbeitest, läuft etwas falsch.

    In main hast du z.B. keine Information, wie groß das Array wirklich ist.



  • Als Anfänger sollte man new/delete wenigstens mal gemacht haben, es ist Teil der Sprache.

    Er hats doch richtig verwendet. Aber ein Standard-Container wäre wohl die beste Lösung.



  • @spiri sagte in Problem mit Array Übergabe:

    Als Anfänger sollte man new/delete wenigstens mal gemacht haben, es ist Teil der Sprache.

    Nein! Als Fortgeschrittener sollte man new/delete wenigstens mal gemacht haben, es ist Teil der Sprache.



  • So fortgeschritten muss man für new/delete nicht sein.



  • Zumindest in meiner Welt ist die Anwendung von "new" und "delete" auf sehr wenige Spezialfälle begrenzt, wenn es überhaupt noch Anwendungsfälle gibt. Wenn ich mich rückbesinnen müsste, wann ich das letzte "new" verwendet habe, müsste ich sehr intensiv überlegen.

    Zumal man heutzutage auch Objekte auf dem Stack anlegen kann und diese dann quasi mit std::move auch
    "kostengünstig" weitertransportiert werden können, so dass in manchen Fällen nicht mal Smart-Pointer nötig sind.

    Kurzum: Die modernen C++-Standards bieten sehr viele gute Alternativen zu "new" und "delete". Daher bin ich auch nicht unbedingt der Ansicht, dass Anfänger direkt mit "new" und "delete" konfrontiert werden müssen, sondern lieber erstmal mit Containern der STL, die in aller Regel genau das anbieten, was der Anfänger braucht.



  • @spiri sagte in Problem mit Array Übergabe:

    So fortgeschritten muss man für new/delete nicht sein.

    Man sollte verstehen können, warum man es allgemein nicht einsetzen sollte.


Anmelden zum Antworten