Επιστροφή πίνακα από τη συνάρτηση C ++

Return Array From Function C



Οι πίνακες είναι συγκεκριμένοι περιέκτες που έχουν τιμές του ίδιου τύπου δεδομένων. Οι συναρτήσεις στο C ++ εκτελούν λειτουργίες σε πίνακες και αυτοί οι πίνακες επιστρέφονται στην κύρια συνάρτηση. Υπάρχουν πολλές προσεγγίσεις για την περιγραφή αυτού του φαινομένου. Σε αυτόν τον οδηγό, εξηγούνται μερικές συνήθεις μέθοδοι:

Χρησιμοποιήστε δείκτες για να επιστρέψετε τον στατικό πίνακα

Όταν χρησιμοποιούμε έναν κανονικό πίνακα, υπάρχουν πιθανότητες να έχουμε κάποιο είδος μη φυσιολογικών αποτελεσμάτων. Για να αποφευχθεί αυτό, χρησιμοποιούμε έναν στατικό πίνακα στον κώδικα C ++. Ας καταλάβουμε το παράδειγμα που χρησιμοποιήσαμε. Σε αυτήν τη συνάρτηση, έχουμε δηλώσει έναν πίνακα με 5 τιμές τον τύπο επιστροφής όπως αναφέρεται εδώ.







Συνάρτηση Int *()



Καθώς η τιμή θα είναι ένας ακέραιος τύπος, έτσι επισημαίνεται ως int στο παρακάτω παράδειγμα. Όπως έχουμε εισαγάγει τη συνάρτηση ως δείκτη, η συνάρτηση θα είναι τύπου δείκτη. Μετά την εισαγωγή των τιμών, ένας πίνακας επιστρέφει στο κύριο πρόγραμμα.







Στο κύριο πρόγραμμα, πραγματοποιήσαμε μια κλήση συνάρτησης. Για να δεχτούμε την τιμή που επιστρέφεται από τη συνάρτηση, θα χρησιμοποιήσουμε μια ακέραιη μεταβλητή. Όταν επιστρέψει ο πίνακας, μπορούμε να έχουμε εύκολη πρόσβαση στις τιμές του. Οι τιμές θα εκτυπωθούν με μη αυτόματο τρόπο.

Int*δείκτης=λειτουργία()?

Ο σκοπός του δείκτη είναι να εντοπίσει το στοιχείο που υπάρχει στο ευρετήριο ενός του πίνακα. Με άλλα λόγια, εμφανίζει τη διεύθυνση της τιμής στον πίνακα. Στη συνέχεια, χρησιμοποιούμε ένα πρωτότυπο συνάρτησης που θα επιστρέψει τον δείκτη.



Για να δούμε την έξοδο του πίνακα που επιστρέφεται μέσω της συνάρτησης, πρέπει να έχουμε πρόσβαση στο τερματικό του Ubuntu στην περίπτωση του Linux. Αυτό οφείλεται στο ότι η έξοδος είναι προσβάσιμη μέσω του τερματικού Linux. Στο Linux, χρειαζόμαστε έναν μεταγλωττιστή για την εκτέλεση κωδικών C ++ γραμμένων σε οποιοδήποτε πρόγραμμα επεξεργασίας κειμένου. Αυτή η συλλογή γίνεται μέσω G ++. Το -o χρησιμοποιείται για την αποθήκευση της εξόδου σε ένα αρχείο. Εδώ, χρειαζόμαστε το αρχείο εξόδου και το αρχείο πηγαίου κώδικα. Μετά τη μεταγλώττιση, θα εκτελέσουμε τον κώδικα:

$g ++ file1 file1.γ
$./αρχείο 1

Από την έξοδο, μπορούμε να δούμε ότι ο πίνακας, που αρχικοποιήθηκε στη συνάρτηση, εμφανίζεται στην κύρια συνάρτηση χρησιμοποιώντας έναν στατικό πίνακα, που εκκινείται χειροκίνητα και μέσω των δεικτών.

Επιστροφή δυναμικά κατανεμημένου πίνακα χρησιμοποιώντας δείκτες

Οι πίνακες μπορούν να επιστραφούν χρησιμοποιώντας δυναμική κατανομή. Οι πίνακες μπορούν να κατανεμηθούν δυναμικά χρησιμοποιώντας τη λέξη new. Θα παραμείνουν εκεί μέχρι να τα διαγράψουμε μόνοι μας. Οι στατικές συστοιχίες έχουν σταθερό μέγεθος, πράγμα που σημαίνει ότι πρέπει να παρέχετε μέγεθος κατά την προετοιμασία. Μόλις δημιουργηθεί ο πίνακας, τότε είναι δύσκολο να αυξηθεί το μέγεθος κατά το χρόνο εκτέλεσης ή στο εξής. Αλλά στην περίπτωση του δυναμικού πίνακα, μπορούμε να προσθέσουμε περισσότερα στοιχεία όποτε θέλουμε επειδή επεκτείνεται καθώς εισάγουμε τιμές σε αυτό. Επομένως, δεν χρειάζεται να καθορίσουμε ή να προσδιορίσουμε οποιοδήποτε μέγεθος.

Προχωρώντας προς το παράδειγμα που χρησιμοποιήσαμε εδώ. Έχουμε χρησιμοποιήσει έναν δυναμικό πίνακα με τους δείκτες όπως στα προηγούμενα παραδείγματα, όπου έχουμε χρησιμοποιήσει δείκτες με τους στατικούς πίνακες.

Int*λειτουργία()

Μετά τη δήλωση συνάρτησης, οι πίνακες δηλώνονται δυναμικά:

Int*πίνακας= νέος int [100]?

Ο όρος, νέος, χρησιμοποιείται συνεχώς για τη δημιουργία μιας δυναμικής συστοιχίας. Θα εκτελέσουμε πράξεις στον πίνακα εισάγοντας τιμές σε αυτόν. Μετά από αυτό, ο πίνακας επιστρέφει στο κύριο πρόγραμμα:

Τώρα, εξετάστε την κύρια λειτουργία. Έχουμε κάνει την κλήση συνάρτησης. Καθώς ο πίνακας επιστρέφει, προσθέτουμε μια μεταβλητή τύπου ακέραιου δείκτη για να δεχτούμε την τιμή.

Int*δείκτης=λειτουργία()?

Οι τιμές που ήταν αποθηκευμένες στον πίνακα εκτυπώνονται χειροκίνητα. Η έξοδος λαμβάνεται μέσω της μεθόδου σύνταξης και εκτέλεσης.

Πίνακας επιστροφής χρησιμοποιώντας τις δομές

Οι δομές είναι τα δοχεία όπως οι πίνακες. Αλλά ο πίνακας περιέχει την τιμή του ίδιου τύπου δεδομένων κάθε φορά. Και στην περίπτωση των δομών, περιέχουν περισσότερες από μία τιμές τύπου δεδομένων. Έχουμε πάρει μια δομή που ονομάζεται δείγμα. Εδώ, η δήλωση πίνακα βρίσκεται μέσα στις δομές αντί για συναρτήσεις. Ο τύπος επιστροφής είναι το όνομα της δομής. Η μεταβλητή δομής επιστρέφεται στο κύριο πρόγραμμα. Η δομή χρησιμοποιεί τη λέξη struct για δήλωση.

Δομή δείγματος
{
Int arr[100]?
}?

Μετά τη δήλωση δομής, χρησιμοποιήσαμε μια συνάρτηση στην οποία δημιουργείται ένα αντικείμενο δομής. Αυτό το αντικείμενο θα χρησιμοποιηθεί για πρόσβαση στη δομή. Αυτή η συνάρτηση θα επιστρέψει το αντικείμενο της δομής στην κύρια συνάρτηση, ώστε να μπορούμε να εκτυπώσουμε τον πίνακα μέσω αυτού του αντικειμένου. Μια μεταβλητή θα λάβει τις τιμές της μεταβλητής. Αυτή η τιμή είναι ο ακέραιος αριθμός μέχρι τον οποίο θα εισάγουμε τιμές στον πίνακα. Όπως σε αυτό το παράδειγμα, έχουμε επιλέξει 6 ως αριθμό. Έτσι, οι αριθμοί θα εισαχθούν έως 6 στον πίνακα.

Δομή δείγματος func(intν)

Τώρα, προχωρώντας προς το κύριο πρόγραμμα, έχουμε δημιουργήσει ένα αντικείμενο για πρόσβαση στον πίνακα μέσω αυτού:

Δείγμα δομής x?

Μετά την προετοιμασία αντικειμένου, προστίθεται μια τιμή στη μεταβλητή μέχρι την οποία θέλουμε να εισαχθούν οι αριθμοί στον πίνακα. Σε μια κλήση συνάρτησης, θα περάσουμε την τιμή στην παράμετρο:

Χ=λειτουργία(ν)?

Θα έχουμε την οθόνη χρησιμοποιώντας τον βρόχο for. Οι τιμές εμφανίζονται μέσω του αντικειμένου που δηλώνεται στην αρχή του κύριου προγράμματος:

Η έξοδος υποδεικνύει ότι στο αποτέλεσμα εμφανίζονται 6 τιμές καθώς έχουμε εισαγάγει 6 αριθμούς στο πρόγραμμα.

Πίνακας επιστροφής χρησιμοποιώντας το Std

Το C ++ χρησιμοποιεί πολλές μεθόδους για να επιστρέψει έναν πίνακα από τη συνάρτηση. Ένα από αυτά είναι μέσω του πίνακα std ::. Είναι ένα πρότυπο δομής. Αυτή η δυνατότητα παρέχει επίσης δύο ακόμη λειτουργίες μεγέθους () και κενές (). Επιστρέφεται ένα όνομα πίνακα που υποδεικνύει ότι ολόκληρος ο πίνακας επιστρέφει στο κύριο πρόγραμμα. Εδώ, θα προσθέσουμε έναν πίνακα αρχείου κεφαλίδας. Εκτός από τη βιβλιοθήκη, περιέχει όλες τις συναρτήσεις του πίνακα.

#περιλαμβάνω

πίνακας<int,10>>λειτουργία()

Δεδομένου ότι μπορούμε να επιστρέψουμε ολόκληρο τον πίνακα με το όνομά του, έτσι στη δήλωση μιας συνάρτησης, θα χρησιμοποιήσουμε τον πίνακα ως τύπο επιστροφής. Τα δεδομένα εισάγονται στον πίνακα. Μετά από αυτό, ο πίνακας θα επιστρέψει στο κύριο πρόγραμμα. Προχωρώντας προς την κύρια συνάρτηση, μια μεταβλητή πίνακα θα δεχτεί τον πίνακα όταν καλείται η συνάρτηση.

arr=λειτουργία()?

Και πάλι, για το βρόχο θα χρησιμοποιηθεί για την εμφάνιση τιμών πίνακα. Παρατηρούμε την έξοδο από την εικόνα που εμφανίζεται παρακάτω. Καθώς έχουμε χρησιμοποιήσει 10 μεγέθη, θα εισαχθούν 0 αριθμοί. Επομένως, εμφανίζονται αυτά:

Πίνακας επιστροφής μέσω διανυσματικού κοντέινερ

Αυτή η προσέγγιση είναι ένας δυναμικά κατανεμημένος πίνακας. Όπως και σε αυτήν την περίπτωση, δεν χρειάζεται να καθορίσετε το μέγεθος του πίνακα. Δεν χρειαζόμαστε καμία παράμετρο μεγέθους εδώ. Χρησιμοποιώντας αυτό το παράδειγμα, πρέπει να προσθέσουμε μια κεφαλίδα διανύσματος στη βιβλιοθήκη που περιέχει τις λειτουργίες του διανύσματος.

Μετακίνηση προς τη συνάρτηση, όπου ο τύπος επιστροφής είναι επίσης ένα διάνυσμα int και περιέχει επίσης έναν δείκτη διανύσματος ως όρισμα στην παράμετρο. Ένας πίνακας με το όνομα temp εισάγεται εδώ:

Διάνυσμα<int>>MultiplyArrayByTwo(constδιάνυσμα<int>> *arr)

Η συνάρτηση θα πολλαπλασιάσει τα στοιχεία του πίνακα κατά δύο μέσω της συνάρτησης tmp.push_back (). Στη συνέχεια, επιστρέψτε το tmp. Μια μεταβλητή αυτόματου τύπου θα αποδεχτεί τις τιμές του πίνακα από τη συνάρτηση. Ο πίνακας περιέχει τα στοιχεία σε αυτό.

Η έξοδος δείχνει τη λειτουργία του διανυσματικού δοχείου.

συμπέρασμα

Στο προαναφερθέν άρθρο, έχουμε περιγράψει τις πέντε πιο συχνά χρησιμοποιούμενες μεθόδους για να εξηγήσουμε τη λειτουργικότητα της επιστροφής ενός πίνακα από τη συνάρτηση.