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

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

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

  • 0
Giovanni_10

STL (Standard Template Library) C++

Ερώτηση

Παίδια μπορεί να βοηθήσει κανεις για το πώς χρησιμοποιούνται το Περιγραμματα :rolleyes: (Templates) στη C++.

Ευχαριστώ εκ των πρωτέρων...

Κοινοποιήστε αυτήν την ανάρτηση


Σύνδεσμος στην ανάρτηση
Κοινοποίηση σε άλλες σελίδες

2 απαντήσεις σε αυτή την ερώτηση

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

Παίδια μπορεί να βοηθήσει κανεις για το πώς χρησιμοποιούνται το Περιγραμματα :rolleyes: (Templates) στη C++.

Ευχαριστώ εκ των πρωτέρων...

 

Τα περιγράμματα ή templates χρησιμοποιούνται στην C++ για να μπορέσει ο προγραμματιστής να "γενικοποιήσει" τον κώδικα του έτσι ώστε να αποκτήσει πολυμορφικότητα καλύπτοντας έτσι την ανάγκη για δημιουργία κάθε φορά ξεχωριστού κώδικα για μια παρόμοια λειτουργία.

Εφόσον αναφέρεις λοιπόν την STL που είναι ένα καταπληκτικό framework για τις ανάγκες ενός προγραμματιστή θα σου δώσω ένα παράδειγμα:

 

Έστω λοιπόν ότι θέλω να δημιουργήσω ένα δυναμικό πίνακα που επεκτείνεται μόνο από το τέλος, ένα vector όπως θα λέγαμε και στην STL το οποίο θα το γεμίζω με "κάτι" και αυτό το κάτι θέλω να το τυπώνω. Έτσι αν το γεμίζω με χαρακτήρες (char) θα θέλω να τυπώνω τους χαρακτήρες του vector, αν το γεμίζω με ακεραίους (int) θα θέλω να τυπώνω ακεραίους κτλ κτλ. Κάθε φορά λοιπόν όπως στην C, θα πρέπει να ορίζω και μία ξεχωριστή συνάρτηση που να μου τυπώνει αυτό το κάτι που θα βάζω στο vector. Εδώ μπαίνουν τα templates και σου λένε:

Γιατί δεν κάνω μία συνάρτηση που να τυπώνει ότι επιλέγει κάθε φορά ο χρήστης;

Έτσι:

 

>
//---------------------------------------------------------------------------
#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

//---------------------------------------------------------------------------
/* Print a Vector. */
template <typename T>
void PrintVector(const vector<T> nVec)
{
vector<T>::const_iterator nIter(nVec.begin());
for(; nIter != nVec.end(); nIter++)
	cout << *nIter << endl;
}
/* Main Code. */
int main(int argc, char* argv[])
{
/* General Index. */
static unsigned int Idx = 0;
const int LoopFactor = 10;
/* Create an empty Vector. */
vector <int> nVector;
for(Idx = 0; Idx < LoopFactor; Idx++)
	nVector.push_back(Idx);
/* Print our vector. */
PrintVector<int>(nVector);
cout << "Hit enter to continue...." << endl;
cin.get();
return 0;
}
//---------------------------------------------------------------------------

 

Αυτό το πρόγραμμα αν το τρέξουμε θα μας τυπώσει τους αριθμούς από το 0-9 κάθετα στην οθόνη μας. Τα templates μας επιτρέπουν την εξής αλλαγή, μπορούμε να αλλάξουμε το int -> double και χωρίς να αλλάξουμε το παραμικρό στον κώδικα παρά μόνο μία προσθήκη στην τιμή που θα αποθηκεύουμε στο vector να δουλέψει μια χαρά.

Έτσι:

 

>
//---------------------------------------------------------------------------
#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

//---------------------------------------------------------------------------
/* Print a Vector. */
template <typename T>
void PrintVector(const vector<T> nVec)
{
vector<T>::const_iterator nIter(nVec.begin());
for(; nIter != nVec.end(); nIter++)
	cout << *nIter << endl;
}
/* Main Code. */
int main(int argc, char* argv[])
{
/* General Index. */
static unsigned int Idx = 0;
const int LoopFactor = 10;
/* Create an empty Vector. */
vector <double> nVector;
for(Idx = 0; Idx < LoopFactor; Idx++)
	nVector.push_back(Idx / 1.4);
/* Print our vector. */
PrintVector<double>(nVector);
cout << "Hit enter to continue...." << endl;
cin.get();
return 0;
}
//---------------------------------------------------------------------------

 

Θα παράγει το:

 

0

0.714286

1.42857

2.14286

2.85714

3.57143

4.28571

5

5.71429

6.42857

Hit enter to continue....

 

Ελπίζω να με κατάλαβες....

Κοινοποιήστε αυτήν την ανάρτηση


Σύνδεσμος στην ανάρτηση
Κοινοποίηση σε άλλες σελίδες
×
×
  • Δημιουργία νέου...