PDA

View Full Version : [C++] For each


wisher
01-04-2008, 17:25
Ciao, vorrei sapere se nel C++ il ciclo for each esiste solo nell'implementazione del Visual Studio o se è presente anche nel gcc.
Con Visual studio infatti non ho problemi a compilare del codice che lo contiene mentre con devC++ ottengo questo errore:
each undecleared, expecting '(' before each

stdecden
01-04-2008, 17:26
No, non esiste nel c++ il foreach. Per quali classi ti serve? Le STL per caso??? :confused:

wisher
01-04-2008, 17:27
No, non esiste nel c++ il foreach. Per quali classi ti serve? Le STL per caso??? :confused:
Dovrei utilizzarlo sulle liste, con Visual studio utilizzavo la classe list

stdecden
01-04-2008, 17:32
Se non sbagli allora devi fare:


#include <list>
...
std::list<int> array();
for(std::list<int>::iterator i = array.begin(); i != array.end(); i++)
{
...
// Fai qualcosa
std::cout << (*i);
...
}


P.S. Spero sia giusto, ultimamente sto faciendo c# e java percui ci potrebbe essere qualche errore

jappilas
01-04-2008, 17:59
forse stavi pensando a questo (http://www.sgi.com/tech/stl/for_each.html) ?

wisher
01-04-2008, 18:11
forse stavi pensando a questo (http://www.sgi.com/tech/stl/for_each.html) ?
No, con VS riesco a compilare proprio for each(int a in listaDiInteri){..}
Se non sbagli allora devi fare:


#include <list>
...
std::list<int> array();
for(std::list<int>::iterator i = array.begin(); i != array.end(); i++)
{
...
// Fai qualcosa
std::cout << (*i);
...
}


P.S. Spero sia giusto, ultimamente sto faciendo c# e java percui ci potrebbe essere qualche erroreDevC++ non protesta più.
Ora però ho un altro problema, con Visual Studio avevo pragma once che DevC++ non riconosce, come posso sostituirla?

kernel::panic
01-04-2008, 18:25
Ora però ho un altro problema, con Visual Studio avevo pragma once che DevC++ non riconosce, come posso sostituirla?

All'interno dei .h puoi mettere un costrutto tipo questo che garantisce che il file venga processato solo una volta:

#ifndef _MIO_FILE_H_
#define _MIO_FILE_H_

// Codice del file

#endif

RaouL_BennetH
01-04-2008, 19:16
scusa, ma per il "for each", non dovrebbe essere scritto: for_each ?

http://www.cplusplus.com/reference/algorithm/for_each.html

wisher
01-04-2008, 20:06
All'interno dei .h puoi mettere un costrutto tipo questo che garantisce che il file venga processato solo una volta:

#ifndef _MIO_FILE_H_
#define _MIO_FILE_H_

// Codice del file

#endif
Perfetto, grazie
scusa, ma per il "for each", non dovrebbe essere scritto: for_each ?

http://www.cplusplus.com/reference/algorithm/for_each.html
Con Visual C++ si ha a disposizione un for each molto simile a quello presente in linguaggi come C# e Java, molto più comodo dell'implementazione con gli iteratori
http://blogs.msdn.com/arich/archive/2004/09/08/227139.aspx

tomminno
02-04-2008, 07:41
Perfetto, grazie

Con Visual C++ si ha a disposizione un for each molto simile a quello presente in linguaggi come C# e Java, molto più comodo dell'implementazione con gli iteratori
http://blogs.msdn.com/arich/archive/2004/09/08/227139.aspx

Quello non è C++ ma un altro linguaggio (chiamato C++/CLI).

gugoXX
02-04-2008, 08:16
Quello non è C++ ma un altro linguaggio (chiamato C++/CLI).

Confermo.
In VS nuovi ci sono 2 tipi di C++
- Il VC++ classico
- Una versione managed del C++, parente stretto del VB.net e del C#, con features quali la garbage collection, piena integrazione con il framework, etc.

Normalmente si sconsiglia l'uso di quest'ultimo. Si propende per usare direttamente il VC++ originale oppure il C# (o il VB.net, ma piu' raro in ambito professionale).