Newsgroup: it.comp.lang.c++
Titolo: vector<int> -> int *

Salve,
come da topic, vorrei sapere se avendo un
vector<int> v;
posso ottenere (cosě come per gli oggetti tipo 'string s' si puň - 
tramite s.c_str() - ottenere un equivalente array di char)
int * v;
Nonostante sembri apparentemente inutile č necessario per un particolare 
utilizzo in un programma OpenGL.
Grazie...

 utilizzo in un programma OpenGL.
Non sembra affatto inutile. E' anzi un'esigenza frequente. Qualcuno ha 
anche proposto che nel prossimo Standard venga aggiunto a 'std::vector<>' 
un metodo 'data()' che restituisca un 'T*'.
Max

   int* data = &v[0].
Non sono sicuro se funziona ciò che hai scritto perchè credo dipenda da come
è stato overloadato l'operatore [] per i vector.
Se se tu sei sicuro di ciò mi hai insegnato  una grande cosa.Devo provarlo.
Certamente questo è lecito: 
vector<int>::const_iterator it;
it=v.begin();
int *data=it; //data punta ora all'array di interi
Per come è definita la STL un iteratore è proprio un puntatore al dato
contenuto dal container. 
Se in più aggiungiamo ,come hai detto e come è in effetti ,che  gli elementi
del vector occupano posizioni adiacenti i conti tornano.

 
Mi autobastono , ho scritto una cavolata fate finta di niente...
Va benissimo int *data=&v[0];
Thanks

   int* data = &v[0].
...e se invece avessi un
std::vector<int> * v ??
Cioe' un puntatore ad un vettore di interi ?

 elementi del vector occupano posizioni adiacenti i conti tornano.
si, garantito dalla primo Techincal Corrigendum dello Standard
<cite "Breaking news at press time: ">
On Friday, October 27, 2000, at the conclusion of the Toronto meeting, the
 C++ standards committee approved two important milestones:
1. Approved the contents of the C++ Standard's first Technical 
 Corrigendum (TC). The vote passed unanimously, and this material will
 become the first official update to the ISO/ANSI C++ Standard pending
 only a few more months of grinding through the routine publication
 mechanics and paperwork that the standards bodies require.
One of the interesting changes in the TC is that the standard will now
 guarantee that vector storage is contiguous (except of course for the
 specialization vector<bool>), where "contiguous" means to be stored in
 the same way as a C-style array; see Figure 3. One reason that it's
 important that vector be stored contiguously is so that it can be used
 easily as a complete drop-in replacement for C-style arrays, even when
 calling legacy facilities designed to operate on plain arrays; for more
 details, see my July/August 1999 column in C++ Report.[7] If you're
 wondering why vector<bool> would get a seemingly surprising exception
 from this rule, see also my May 1999 column in C++ Report for the 
 scoop on that juicy little eccentricity.[8] 
</cite>
sbirish.



 int* pdata = &((*v)[0]);
un motivo per usare un std::vector<>* ? ^^
sbirish.
-- 
dietro le transenne! 

 un motivo per usare un std::vector<>* ? ^^
Questa e' una bella domanda.
In realta' non ne avevo più bisogno, ma in un momento in cui facevo dei 
test (ok diciamola tutta, in un momento in cui facevo dei test e quindi 
scrivevo codice inaccettabile anche per bontà divina e che nessuna 
persona ammetterebbe mai di aver scritto :P ) mi era venuto il dubbio 
circa il parallelo tra string::c_str() e vect, e di lì viaggiare con la 
fantasia e' stato un attimo (e quindi sono arrivato a std::vector<float> 
* v).
Grazie tante per le risposte.