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

vector


mairy87

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

Καλησπέρα.

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

Σας ευχαριστώ πολύ εκ των προτέρων...

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

  • Απαντ. 65
  • Δημ.
  • Τελ. απάντηση
Καλησπέρα.

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

Σας ευχαριστώ πολύ εκ των προτέρων...

 

Για τι γλώσσα προγραμματισμού μιλάμε? :-)

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Μπορείς να κάνεις την ερώτηση σου εδώ.

Αυτό είναι το νόημα του forum....όχι η προσωπική εκμάθηση.

 

+1

 

Έτσι πάει. Όποια απορία έχεις, μπορείς να την κάνεις εδώ, και θα έχεις και καλύτερες απαντήσεις, γιατί θα την δουν περισσότερα άτομα = καλύτερες απαντήσεις ;)

 

Πολύ καλό βοήθημα (ήταν για μένα τουλάχιστο που είχα να ασχοληθώ με c++ λόγο σχολής) είναι αυτή η σελίδα http://www.cppreference.com,'>http://www.cppreference.com, και συγκεκριμένα για Vectors οι εντολές εδώ: http://www.cppreference.com

 

:-)

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Μπορείς να κάνεις την ερώτηση σου εδώ.

Αυτό είναι το νόημα του forum....όχι η προσωπική εκμάθηση.

 

+1

 

Έτσι πάει. Όποια απορία έχεις, μπορείς να την κάνεις εδώ, και θα έχεις και καλύτερες απαντήσεις, γιατί θα την δουν περισσότερα άτομα = καλύτερες απαντήσεις ;)

 

:-)

 

Δίκιο έχετε....και στη MySql αν προσέξατε, που είχα συγκεκριμένες ερωτήσεις, τις έκανα....

Το θέμα μου είναι, ότι σε 2 μέρες δίνω στη σχολή πάνω στους vectors και θα ήθελα εάν είναι δυνατόν κάποιος να μου εξηγήσει 5 βασικά πραγματάκια:cry:....για τη δομή τους....την υλοποίησή τους....(γι αυτό είπα και για προσωπική εκμάθηση- κάποιος που τα ξέρει και είναι διατεθιμένος να με βοηθήσει, να μου πει τα βασικά για να μην σας ζαλίζω όλους."δεν έχω σκοπό να σας βασανίσω;)" Δεν νομίζω ότι για σας υπάρχει και μεγάλη διαφορά από το να γράφετε εδώ η σε pm, νομίζω τουλάχιστον).

Να, για παράδειγμα, θα μπορούσαμε να πάρουμε ένα απλό προγραμματάκι πάνω στους vector αν θέλετε μπορώ να γράψω εγώ κάποιο, και να το αναλύσουμε(βήμα-βήμα) τι κάναμε και γιατί...Το θέμα είναι ότι δεν έχω ασχοληθεί ποτέ με vector και θέλω απλά βασικά πραγματάκια, τα οποία μπορεί να σας φανούν και λίγο "χαζα"...

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Δίκιο έχετε....και στη MySql αν προσέξατε, που είχα συγκεκριμένες ερωτήσεις, τις έκανα....

Το θέμα μου είναι, ότι σε 2 μέρες δίνω στη σχολή πάνω στους vectors και θα ήθελα εάν είναι δυνατόν κάποιος να μου εξηγήσει 5 βασικά πραγματάκια:cry:....για τη δομή τους....την υλοποίησή τους....(γι αυτό είπα και για προσωπική εκμάθηση- κάποιος που τα ξέρει και είναι διατεθιμένος να με βοηθήσει, να μου πει τα βασικά για να μην σας ζαλίζω όλους."δεν έχω σκοπό να σας βασανίσω;)" Δεν νομίζω ότι για σας υπάρχει και μεγάλη διαφορά από το να γράφετε εδώ η σε pm, νομίζω τουλάχιστον).

Να, για παράδειγμα, θα μπορούσαμε να πάρουμε ένα απλό προγραμματάκι πάνω στους vector αν θέλετε μπορώ να γράψω εγώ κάποιο, και να το αναλύσουμε(βήμα-βήμα) τι κάναμε και γιατί...Το θέμα είναι ότι δεν έχω ασχοληθεί ποτέ με vector και θέλω απλά βασικά πραγματάκια, τα οποία μπορεί να σας φανούν και λίγο "χαζα"...

 

κι εμείς χαζοί είμαστε μην ανησυχείς.

 

Τα βασικά από τη σελίδα που σου είπα είναι:

 

αφού κάνεις #include <vector> στην αρχή του κώδικα,

 

για να δημιουργήσεις ένα vector για integers κάνεις:

 

vector<int> v; όπου v το όνομα του vector.

 

για να προσθέσεις αριθμό στο vector :

 

v.push_back(5); προσθέτει τον αριθμό 5

 

είναι όλα στη σελίδα που σου έδωσα. Κάνε λίγο διάβασμα και δοκίμαζε πράγματα στο pc να δεις αν δουλεύουν. Για κάτι συγκεκριμένο λες εδώ και κάποιος θα έχει την απάντηση (εγώ είμαι λίγο σκουριασμένος :o)

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

κι εμείς χαζοί είμαστε μην ανησυχείς.

 

Για κάτι συγκεκριμένο λες εδώ και κάποιος θα έχει την απάντηση (εγώ είμαι λίγο σκουριασμένος :o)

 

1ον)Σε αυχαριστώ για την απάντησή σου

και 2ον) τι εννοείς όταμ λες πως είσαι "λίγο σκουριασμένος"??

 

Να δώσω ένα παράδειγμα...έχουμε και λέμε:

 

using namespace std;

 

template <class T>

void printVector (vector<T> &v)

{

....

....

}

int main()

{

....

....

}

 

Μπορεί κάποις να μου εξηγήσει τι ακριβώς κάνουμε εδώ??

Τι παίζει ανάμεσα στις κλάσεις και τους vector??

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

1ον)Σε αυχαριστώ για την απάντησή σου

και 2ον) τι εννοείς όταμ λες πως είσαι "λίγο σκουριασμένος"??

 

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

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

1ον)Σε αυχαριστώ για την απάντησή σου

και 2ον) τι εννοείς όταμ λες πως είσαι "λίγο σκουριασμένος"??

 

Να δώσω ένα παράδειγμα...έχουμε και λέμε:

 

using namespace std;

 

template <class T>

void printVector (vector<T> &v)

{

....

....

}

int main()

{

....

....

}

 

Μπορεί κάποις να μου εξηγήσει τι ακριβώς κάνουμε εδώ??

Τι παίζει ανάμεσα στις κλάσεις και τους vector??

 

 

τα vectors ειναι template classes.

Ξερεις τι ειναι template class ή template γενικοτερα?

 

ενα απλο παραδειγμα

ας υποθεσουμε οτι θες να φτιαξεις μια κλαση που αναπαριστα ενα σημειο στο επιπεδο, δηλ θα εχει τις x,y συντεταγμενες του σημειου. Ας την ονομασουμε Point. Απλό ως εδω?

Μεχρις στιγμης εχεις αποφασισει πως οι συντεταγμενες θα ειναι integers γιατι... ετσι σε βολευει, no comments.

Η κλασση σου λοιπον θα ηταν καπως ετσι

>
class Point
{
public:
[indent]Point(int _x, int _y)    // constructor
{[indent]x = _x;
y = _y;
[/indent]
}
[/indent]private:
[indent]int x;
int y;
[/indent]
}

Ωραια ως εδω? Αν, μεχρι αυτο το σημειο ηθελες να δημιουργησεις μια μεταβλητη τυπου Point, το μονο που θα ειχες να κανεις θα ηταν κατι σαν και αυτο

> Point myPointVar( 10,20 ); 

και θα ειχες την myPointVar με το x να εχει την τιμη 10, και το y να εχει την τιμη 20. Φυσικα μια τετοια κλαση θελει και αλλες συναρτησεις για να γινει χρησιμη, εδω κανω ενα υπεραπλοποιημενο παραδειγματακι

 

Τωρα, ανακαλυπτεις οτι για πολλους και διαφορους χαριτωμενους λογους, υπαρχουν περιπτωσεις όπου η κλαση σου ειναι χρησιμο να έχει τις συντεταγμενες σε , ας πουμε, float αντι για int.

Τι κανεις?

1) Αλλαζεις τον τυπο μεταβλητων της ηδη υπαρχουσας Point απο int σε float? Και αν σου ξαναχρειαστει το int τι κανεις?

2) Φτιαχνεις άλλη κλάσση που να λεγεται κατι του στυλ PointFloat? Ok, αλλα πρεπει να ξανα-υλοποιησεις τη λειτουργικοτητα της Point προσαρμοσμενη σε float, και αυτο θα πρεπει να ξαναγινει αν χρειαστεις και άλλο τυπο μεταβλητων, πχ double.

3) Κανεις την Point να ειναι template class. Δηλαδη να παιρνει διαφορετικους τυπους δεδομενων.

 

Δες την ακολουθη μετατροπη τηςπροηγουμενης κλασσης:

>
template <class T>
class Point
{
public:
[indent]Point( T _x, T _y)    // <-- o constructor pleon pairnei T arguments 
                             // kai oxi int
{[indent]x = _x;
y = _y;
 [/indent]
}
[/indent]private:
[indent]T x;    // <--- oi syntetagmenes einai typou T kai oxi int
T y;
[/indent]
}

Πιανεις τη διαφορα? Αν τωρα θες ενα Point που να παιρνει floats θα το ορισεις ως εξης

> Point<[b]float[/b]> myFloatPoint(3.14, 8.5 ); 

Βασει του τι σου εχω εξηγησει μεχρι στιγμης, μπορεις να καταλαβεις τι εννοω οταν σου πω πως και τα vectors ειναι τετοια template classes, μπορουν δηλ να παρουν οτι τυπο δεδομενων θες (αρκει να ειναι τα ιδια δεδομενα στο ιδιο vector), δηλ int, float, char ή και άλλες κλασσεις ή class pointers.

Αν θες να ορισεις ενα vector που να αποθηκευει πχ ακεραιους, το κανεις ως

> vector<int> myIntVector;  

Μετα απο όλα αυτα, ηρθε η ωρα να εξηγησουμε τι παιζει με την μυστηριωδη συναρτηση σου void printVector (vector<T> &v).

Καταρχην υποθετω πως σκοπος της ειναι να τυπωσει στην οθονη ενα-ενα τα στοιχεια του vector v που παιρνει ως ορισμα.

 

Αν, φτιαχναμε μια printVector για να τυπωνει vectors που παιρνουν ακεραιους μονο θα ηταν ως εξης:

>
void printVector( vector<int> &v ) 
{
[indent]// typose ena-ena ola ta stoixeia tou v
[/indent]

[indent]for(  int i=0; i<= v.size(); i++)
{[indent]cout << v[ i ] << " ";
[/indent]
}
[/indent]}

αλλα εμεις θελουμε να εχουμε μια printVector οχι μονο για int vectors αλλα και για float, και για char και για double, σωστα? Και αυτο γίνεται είτε 1) φτιαχνοντας μια printVector για καθε ειδος vector 2) φτιαχνοντας μια template function printVector

 

Εδω ειμαστε λοιπον

>

template <class T>
void printVector (vector<T> &v)
{
[indent]// typose ena-ena ola ta stoixeia tou v
[/indent]

[indent]for(  int i=0; i<= v.size(); i++)
{[indent]cout << v[ i ] << " ";
 [/indent]
}
[/indent]}

η οποια μπορει να παρει σαν ορισμα ειτε vector<float>, vector<int> και παει λεγοντας

 

Εδω, δεν χρειαστηκε να αλλαξω τον κωδικα της printVector, γιατι απλως τυπωνει, και ο τροπος για να τυπωσεις αριθμους ολων των ειδων ειναι ο ιδιος με το '<<'

 

Αρα, αν εχεις ορισει την

> 
vector<int> myIntVector;  
myIntVector.push_back(1);
myIntVector.push_back(2);
myIntVector.push_back(3);

και θες να τυπωσεις τα περιεχομενα της (αφου της εχεις βαλει κατι μεσα της φυσικα με πχ push_back ) το κανεις με

> printVector( myIntVector ); 

και το output θα ειναι

>1 2 3

 

δες και εδω

Οτι δεν καταλαβες ρωτα, δεν υπαρχουν χαζες ερωτησεις

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Τωρα, ανακαλυπτεις οτι για πολλους και διαφορους χαριτωμενους λογους, υπαρχουν περιπτωσεις όπου η κλαση σου ειναι χρησιμο να έχει τις συντεταγμενες σε , ας πουμε, float αντι για int.

Τι κανεις?

1) Αλλαζεις τον τυπο μεταβλητων της ηδη υπαρχουσας Point απο int σε float? Και αν σου ξαναχρειαστει το int τι κανεις?

2) Φτιαχνεις άλλη κλάσση που να λεγεται κατι του στυλ PointFloat? Ok, αλλα πρεπει να ξανα-υλοποιησεις τη λειτουργικοτητα της Point προσαρμοσμενη σε float, και αυτο θα πρεπει να ξαναγινει αν χρειαστεις και άλλο τυπο μεταβλητων, πχ double.

3) Κανεις την Point να ειναι template class. Δηλαδη να παιρνει διαφορετικους τυπους δεδομενων.

 

Δες την ακολουθη μετατροπη τηςπροηγουμενης κλασσης:

>
template <class T>
class Point
{
public:
[indent]Point( T _x, T _y)    // <-- o constructor pleon pairnei T arguments 
                             // kai oxi int
{[indent]x = _x;
y = _y;
 [/indent]
}
[/indent]private:
[indent]T x;    // <--- oi syntetagmenes einai typou T kai oxi int
T y;
[/indent]
}

Πιανεις τη διαφορα? Αν τωρα θες ενα Point που να παιρνει floats θα το ορισεις ως εξης

> Point<[b]float[/b]> myFloatPoint(3.14, 8.5 ); 

Βασει του τι σου εχω εξηγησει μεχρι στιγμης, μπορεις να καταλαβεις τι εννοω οταν σου πω πως και τα vectors ειναι τετοια template classes, μπορουν δηλ να παρουν οτι τυπο δεδομενων θες (αρκει να ειναι τα ιδια δεδομενα στο ιδιο vector), δηλ int, float, char ή και άλλες κλασσεις ή class pointers.

Αν θες να ορισεις ενα vector που να αποθηκευει πχ ακεραιους, το κανεις ως

> vector<int> myIntVector;  

 

Καταρχάς να σε ευχαριστήσω για την πολύτιμη βοήθεια που μου προσφέρεις.

Τώρα στο θέμα μας....στο κομμάτι που παραθέτω παραπάνω, πρέπει να αναφέρεσαι σε πολυμορφισμό. Σωστά??

Θα μελετίσω και το υπόλοιπο και ότι τυχόν απορίες έχω θα σου πω...

 

 

Επίσης, θα ήθελα να ρωτήσω, πως μπορώ να κάνω μια κλάση "αμιγώς εικονικη" και τι ακριβώς είναι αυτό και σε ποιες περιπτώσεις μου χρειάζεται??

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

 

Αρα, αν εχεις ορισει την

> 
vector<int> myIntVector;  
myIntVector.push_back(1);
myIntVector.push_back(2);
myIntVector.push_back(3);

Μπορείς να μου εξηγήσεις την πρώτη γραμμή??

Κάπου πάει το μυαλό μου, αλλά θέλω να το ακούσω από σένα...

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

2) φτιαχνοντας μια template function printVector

 

Εδω ειμαστε λοιπον

>

template <class T>
void printVector (vector<T> &v)
{
[indent]// typose ena-ena ola ta stoixeia tou v
[/indent]

[indent]for(  int i=0; i<= v.size(); i++)
{[indent]cout << v[ i ] << " ";
 [/indent]
}
[/indent]}

η οποια μπορει να παρει σαν ορισμα ειτε vector<float>, vector<int> και παει λεγοντας

 

Εδω, δεν χρειαστηκε να αλλαξω τον κωδικα της printVector, γιατι απλως τυπωνει, και ο τροπος για να τυπωσεις αριθμους ολων των ειδων ειναι ο ιδιος με το '<<'

 

 

Στην προκειμένη περίπτωση, η int mai μήπως θα είχε τη μορφή:

int main()

{

vector<int> v;

for (int i=0; i<20; i++)

v.push_back(rand() % 100 + 1);

cout << "ta periexomena tou vector einai: \n";

printVector(v);

 

return 0;

}

Στην ουσία θέλω να φτιάξω έναν vector τύπου int και θα τον γεμίζει με 20 τυχαίους ακέραιους από το 1-100 και να εμφανίζω τα περιεχόμενά του στην οθόνη. Πως σου φαίνεται?

 

 

το using namespace std; ....τι ακριβώς κάνει??

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

ναι

 

οπως σου ειπα, το vector ειναι template class δηλ μπορεις να το κανεις να παιρνεις δεδομενα διαφορων τυπων.

Προσοχη εδω (!!!) οχι οτι το ιδιο vector μπορει να παρει διαφορους τυπους δεδομενων αλλα οτι μπορεις να ορισεις ενα vector που να παιρνει int, ένα αλλο που να παίρνει strings etc....

 

To τι τυπο δεδομενων θα παιρνει το vector σου θα πρεπει να το πεις όταν οριζεις αυτο το vector. Και στην περιπτωση ΚΑΘΕ template class (οχι μονο των vectors) αυτο γίνεται βάζοντας μετα από το ονομα της κλάσης των τυπο των δεδομενων που παιρνει μεσα σε <>

 

Αρα το

>
vector<int> myIntVector;

 

ορίζει τη μεταβλητη myIntVector που ειναι τυπου vector που θα μπορει να αποθηκευει int :-). Καλό?

 

Για string πχ θα ελεγες

>
vector<string> myStringVector;

myStringVector.push_back("This");
myStringVector.push_back(" is");
myStringVector.push_back(" a");
myStringVector.push_back(" string");
myStringVector.push_back(" vector");

cout << myStringVector[0] << myStringVector[1] << myStringVector[2] << 
           myStringVector[3] << myStringVector[4] << endl;

 

και output

>This is a string vector

 

Τώρα στο θέμα μας....στο κομμάτι που παραθέτω παραπάνω, πρέπει να αναφέρεσαι σε πολυμορφισμό. Σωστά??

ναι, ειναι ενας τρόπος να υλοποιησεις πολυμορφισμο.... o αλλος ειναι virtual function/classes ή εικονικες όπως λες....

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Στην προκειμένη περίπτωση, η int mai μήπως θα είχε τη μορφή:

int main()

{

vector<int> v;

for (int i=0; i<20; i++)

v.push_back(rand() % 100 + 1);

cout << "ta periexomena tou vector einai: \n";

printVector(v);

 

return 0;

}

Στην ουσία θέλω να φτιάξω έναν vector τύπου int και θα τον γεμίζει με 20 τυχαίους ακέραιους από το 1-100 και να εμφανίζω τα περιεχόμενά του στην οθόνη. Πως σου φαίνεται?

 

 

το using namespace std; ....τι ακριβώς κάνει??

 

ναι, αυτη ειναι η χρηση του, το επιασες πολυ καλα

 

τωρα για το

using namespace std;

λεει στον compiler να κοιταξει και στο namespace με ονομα std για symbols + functionality :-(:-(

 

και επειδη μυριζομαι ερωτηση του στυλ "τι ειναι namespace?" η απαντηση ειναι googlare το, ειναι τοσο τετριμενο που δε χρηζει περαιτερω αναλυσης εδω.

 

To std namespace εχει πολυ υλικο της c++ και σιγουρα εμπεριεχει και τα vectors που θες, οποτε πρεπει να το χρησιμοποιησεις και αυτο.

 

 

Βασικα, δε γραφεις το προγραμματακι να το τρεξεις να το δεις στη πραξη λεω εγω? Ετοιμη εισαι...

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Αρχειοθετημένο

Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.


  • Δημιουργία νέου...