View Full Version : [C++] For each
Albitexm
28-05-2010, 17:36
L'istruzione "for each" è anche un'istruzione C++? O solo Basic?
Quale funzione assolve?
A livello di STL c'è questa:
http://www.cplusplus.com/reference/algorithm/for_each/
Non è parte del linguaggio però, ma di STL.
L'istruzione "for each" è anche un'istruzione C++? a partire da Visual Studio 2010 e dalle versioni piu recenti del gcc la trovi anche in C++ perché fa parte dell'ultima revisione dello standard del C++. purtroppo peró non la trovi nel MinGW perché il MinGW sta indietro rispetto al gcc originale, quindi non la puoi usare ne' in eclipse CDT ne' in CodeBlocks.
Quale funzione assolve? serve ad iterare sugli array e sugli STL containers senza dover dichiarare la variabile iteratrice, permettendo quindi di ridurre la complessitá degli algoritmi. é molto comoda se usata con la keyword auto, che ti permette di fare inferenza dei tipi. ti mostro la sintassi in questo codice di esempio:
int a[5] = { 1, 2, 3, 4, 5, };
for each (auto i in a) {
cout << i << endl;
}
oppure:
list<int> l;
l.push_back(1);
l.push_back(2);
l.push_back(3);
l.push_back(4);
l.push_back(5);
for each (auto i in l) {
cout << i << endl;
}
non sono sicurissimo che il metodo di list si chiamasse "push_back", non mi va di controllare.
a partire da Visual Studio 2010 e dalle versioni piu recenti del gcc la trovi anche in C++ perché fa parte dell'ultima revisione dello standard del C++. purtroppo peró non la trovi nel MinGW perché il MinGW sta indietro rispetto al gcc originale, quindi non la puoi usare ne' in eclipse CDT ne' in CodeBlocks.
Veramente non mi risulta che sia presente nello standard del C++ e nemmeno nel GCC.
Il for each che hai scritto tu è una estensione Microsoft introdotta per il managed C++ (anche se funziona anche sul codice unmanaged).
Nello standard C++ c'è il for_each linkato da shinya, che di fatto è una funzione, le cui funzionalità sono state estese ulteriormente in C++0x.
tomminno
29-05-2010, 11:40
Non è parte del linguaggio però, ma di STL.
:confused:
STL = Standard Template Library
Fa parte della libreria standard del C++
:confused:
STL = Standard Template Library
Fa parte della libreria standard del C++
Si ho capito la tua osservazione. Ma cerca di capire cosa intendevo dire. std::for_each non fa parte della grammatica, è implementata in una libreria.
Veramente non mi risulta che sia presente nello standard del C++ e nemmeno nel GCC. hai ragione a dire che non é presente nel gcc (ho provato ora e non funziona, anche se mi sa che sbaglio qualcosa perché non mi prende neanche le lambda expressions :confused: ) ma per quanto riguarda lo standard del C++ ci sta, solo che avevo sbagliato la sintassi confondendola con quella del costrutto Microsoft :D
http://en.wikipedia.org/wiki/C%2B%2B0x#Range-based_for-loop
tra l'altro ho provato in Visual Studio 2010 e mi sono accorto che il "for each" ci sta, ma il range-based for loop con la sintassi standard no :stordita:
Nello standard C++ c'è il for_each linkato da shinya, che di fatto è una funzione, le cui funzionalità sono state estese ulteriormente in C++0x. be', ora lo si puó utilizzare con le lambda expressions:
#include <iostream>
#include <algorithm>
using namespace std;
int main() {
int a[5] = { 1, 2, 3, 4, 5, };
for_each(a, a + 5, [] (int i) {
cout << i << endl;
});
return 0;
}
cosi diventa molto comodo.
Albitexm
29-05-2010, 12:52
A livello di STL c'è questa:
http://www.cplusplus.com/reference/algorithm/for_each/
Non è parte del linguaggio però, ma di STL.
Secondo voi, "for each" potrei usarla per sviluppare l'espressione che segue?
:
io ho una variabile int "x" e una char "y".
Voglio compararla con una serie di coppie di variabili int "k" e char "z" come
segue: if (x==k && y==z)
{ }
x e y saranno confrontate con:
k1,z1
k2,z2
kn..,zn..
nota: per K1,k2, ecc.. intendo una variabile int sempre diversa, esempio a,b,c. Variabili diverse e slegate tra loro, non elementi di un vettore. Stessa cosa per la variabile char z.
For each potrebbe essere utile in qalche modo per sviluppare questa porzione di codice?
be', ora lo si puó utilizzare con le lambda expressions:
Mi riferivo proprio a questo ;)
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.