Προς το περιεχόμενο

Προτεινόμενες αναρτήσεις

Δημοσ.

Έστω το εξής παράδειγμα:

for(int i=0; i<mylist.size(); i++) {

do something

if(something==true)

mylist.remove(ena stoixeio)

}

Έχει επιπτώσεις αυτό στην αρχική for ; Αν ναι υπάρχει κάποια έξυπνη λύση;

Δημοσ.

Δεν καταλαβαίνω τι θέλεις να πεις αλλά μπορείς να κάνεις και το πιο "καινουριο" for άμα θέλεις ανάθεση που θεωρείται πιο ασφαλές :

 

for(int element: myList){

...

}

Δημοσ.

Θεωρώ ότι το μόνο πρόβλημα που μπορεί να προκύψει δεδομένου ότι η εντολή i<mylist.size() αναθεωρείται με την νέα τιμή του mylist.size() είναι να προσπεράσεις στοιχεία δίχως να τα ελέγξεις.

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

 

Μπορείς φυσικά να το κάνεις trace με ένα τυχαίο παράδειγμα...

Δημοσ.

Έχει επιπτώσεις αυτό στην αρχική for ; Αν ναι υπάρχει κάποια έξυπνη λύση;

 

Όπως λέει και η λύση που βρήκες, τα πράγματα είναι απλούστερα αν ο κώδικας εκφράζει πιό φυσικά αυτό που σκοπεύεις να κάνεις. Στην προκειμένη εφόσον δε χρησιμοποιείς πουθενά το index είναι φυσικότερο να το κάνεις με iterator οπότε βγάζεις από την εξίσωση αυτό που βασικά είναι "άχρηστο implementation detail" και όχι πολύ τυχαία και το πρόβλημα μαζί.

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...