Newsgroup: it.comp.lang.c++
Titolo: Dannato vectoooor!

Se definisco dentro ad una classe
class PIPPO
(
    vector<char*> vettore;
)
quando voglio mettere dentro delle stringhe come faccio ?
Ho provato con
    pippo.vettore.push_back(temp)
dove temp e' definito come char[100], eppure il vettore resta sempre
vuoto...
Il vettore lo scanno con un semplice ciclo for (i=0; i< vettore.size();i++)
, no ?
--
Visita la mia pagina personale:
 
http://members.xoom.it/Ake
*** grafica - ingegneria - midi - humour ***
****  abandonware - emulatori - MUD ****
 ***             DragonBall / Z                ****
Il Covo di Ake ora e' anche senza fili,
visitalo con il tuo cellulare WAP a:
 
tagtag.com/ake
Le Sabbie del Tempo scorrono ancora!
Vieni a giocare su:
  telnet://
sabbie.dhs.org:4000
Sito ufficiale: 
http://sabbie.dhs.org

 , no ?
Oppure con un iteratore; prova questo, dovrebbe funzionare :
#include <iostream>
#include <vector>
using namespace std;
class A {
public:
 vector<char*> vettore;
};
int main() {
 A a;
char *tmp="Ciao";
 a.vettore.push_back(tmp);
 vector< char* >::const_iterator i = a.vettore.begin();
 while (i!=a.vettore.end())
  cout << *(i++);
 cout << endl;
}

 vuoto...
Risposta meno breve:
Innanzitutto, ricorda che:
  un char* non č una stringa, č un puntatore a char
  un char[100] non č un char*, ma č un array di char.
Detto qeusto, non c'č niente di assurdo nell'usare un vector<char*>, ma se
lo facciamo dobbiamo sapere bene cosa stiamo facendo. Un vector<char*> č un
vettore che contiene *puntatori*. Un puntatore punta a qualcosa. Il lifetime
di quel qualcosa non č controllato dal vector. Tanto per fare un esempio: il
seguente codice compila, ma ha un comportamento indefinito:
  std::vector<char*> v;
   {
            char a[5]= "ciao";
            v.push_back(a);
   }
   cerr << v[0] << endl;
Quando viene passato a push_back(), 'a' decade in un char* che punta la
primo elemento di 'a'. 'v' a questo punto contiene un puntatore a un array
di char che immediatamente dopo esce di scope. L'ultima istruzione, perciň,
produce il dereferenziamento di un puntatore che non possiamo piů
considerare valido.
Max

  cout << *(i++);
in questi casi é molto meglio usare l'algoritmo standard for_each, ci
si confonde molto di meno e si evita di scrivere cicli espliciti.
void print_all(const char *ch)
    {
    std::cout<<ch;
    }
/*................*/
std::for_each(a.vettore.begin(),a.vettore.end(),print_all);
Il Ghenio
---------
// TODO: Place your ass here

 tutti sti vantaggi ad usarle..o no ? mah!
considera che tra non molto (qualche anno) M$ probabilmente non 
supportera` piu` MFC, quindi avresti grooossi problemi.
Al contrario troverai std::string su qualunque compilatore, quindi...
ciao Anto
-- 
Antonio Cuni, 19 anni, studente
Brainbench C++ Master: 4.73, higher than 99% of all previous test takers.
C Language: 3.79, higher than 92% of all previous test takers.
Guida C/C++ di Programmazione.it: 
http://cpp.programmazione.it


E' una tua previsione o e' accertato ? E come mai verranno abbandonate ?
Grazie della dritta..stavo per incominciare a studiarle :))


Grazie della dritta..stavo per incominciare a studiarle :))
Personalmente dubito che le MFC verranno abbandonate dalla Microsoft,
é un framework molto diffuso(pur essendo stato progettato in modo
assai discutibile) e molti progetti lo utilizzano.
Casomai il motivo per cui é sconsigliato usare CString sta nel fatto
che la loro implementazione di appoggia direttamente alle API di
Windows ed a MFC stessa, quindi non sono portabili se non si dispone
di un compilatore per Windows e della MFC.
Un altro vantaggio delle std::string é che sono integrabili con gli
algoritmi generici della stl e con i template in generale, ed é quindi
molto più facile estendere le loro funzionalità.


 ? Grazie della dritta..stavo per incominciare a studiarle :))
e` una mia personalissima previsione, senza alcun fondamento 
"ufficiale". Pero` e` noto che MS sta puntando moltissimo sulla 
piattaforma .NET, e per quel che ne so non c'e` posto per MFC in tale 
piattaforma, quindi...
Magari altri piu` informati di me possono essere piu` precisi, pero` in 
questo ng siamo OT.


piattaforma, quindi...
non vorrei dire una stupidaggine ma mi sa che M$ fa bene a
levarsi di torno MFC :)
Lawrence "Rhymes" Oluyede
rhy...@myself.com
"Per cambiare, per diventare un'altra
cosa dobbiamo prima sapere cosa siamo"
(Bruce Lee)