Εργαστήριο Τεχνολογίας Λογισμικού
+1 vote
180 views

Στην άσκηση 3 της 1ης σειράς ασκήσεων στην υποβολή με αριθμό 575773 αντί να δεσμεύω μνήμη στον πίνακα για size θέσεις , δέσμευα για 1000000 κάθε φορά με αποτέλεσμα να καλείται ο constructor πάρα πολλές φορές (πχ στο πρώτο test case κλήθηκε 3000013 αντί για 41 (!)). Τι συμβαίνει;

in progtech by (170 points)
edited by | 180 views

1 Answer

0 votes

Σε παροτρύνω να δεις το βίντεο που ανήρτησε ο διδάσκων του μαθήματος κ. Παπασπύρου (@nickie) : https://www.youtube.com/watch?v=CtJfxMSo3-g

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

(Πάντως δεν υπάρχει κάποιος λόγος να δεσμεύσεις πίνακα 1000000 στοιχείων όταν ζητάει size το πλήθος στοιχείων. Εκτός φυσικά και αν πειραματίζεσαι εξερευνώντας την C++!)

EDIT (κατόπιν σχολίου του ερωτώντος):
Νομίζω καταλάβα ποιο σημείο σε μπερδεύει. Ο grader όταν μετράει κλήσεις σε constructor μετράει τις κλήσεις στον constructor του αντικειμένου T, οποίο κατά περίπτωση είναι αυτό.

Δηλαδή, όπως δείχνει και ο κ. Παπασπύρου στο βίντεο, ο grader θα μετρήσει τις κλήσεις στον constructor του counter. (Η κλάση counter δεν έχει σημασία που δεν υπάρχει στον κώδικά σου. Την προσθέτει αυτόματα ο grader)

Για να γίνω πιο σαφής, έστω ότι πας να φτιάξεις έναν πίνακα από 1000000 στοιχεία ας πούμε του τύπου T. Αν ο T έχει constructor, την στιγμή της κατασκευής του πίνακα θα κατασκευαστούν και όλα αυτά τα στοιχεία, οπότε θα έχουμε και 1000000 κλήσεις στον constructor του T.

Υ.Γ. 1: Δεν γνωρίζω αν τελικά ο grader θα μετρήσει και τις κλήσεις στον constructor του stack ή μόνον στον constructor του τύπου T.

Υ.Γ. 2: Όπου γράφω constructor ανάλογα ισχύουν για τον destructor.

by (2.9k points)
edited by
+1

Βασικά αυτό που μου φάνηκε περίεργο είναι πως ο constructor καλείται τόσες φορές μόνο όταν δεσμεύω 1000000 θέσεις. Όταν δεσμεύσω size θέσεις τότε καλείται σωστό πλήθος φορών.

0

Έχω επεξεργαστεί την απάντηση. (Το προτίμησα από το σχόλιο ώστε η απάντηση να μένει σε περίπτωση που έχουν και άλλοι παρόμοια απορία).

301 questions

289 answers

288 comments

770 users