Newsgroup: it.comp.lang.c++
Titolo: Indici di array

Mettiamo che io voglia crearmi, con l'operatore new, un array di i*j
elementi. Naturalmente potrei fare:
int* e;
e=new int[i*j];
Se però i e j fossero degli indici di riga (i) e colonna (j) di una matrice,
sarebbe carino poter lavorare con elementi e[x,y] invece che con elementi
e[n], dove n=x*i+y.
Come posso fare?
e=new int[i][j] non funziona.
Se creo e=new int[i*j] ma poi mi riferisco ai dati nella forma [x,y]
(sperando che il compilatore capisca e me li trasformi automaticamente) non
funziona (sembra che il coeff. x venga ignorato). Inoltre non riesco nemmeno
a fare l'overload dell'operatore [], per poter implementare il giochetto
n=x*i+y a mano.
HELP! :-)
--
Stefano Pettini
Risposte solo sul newsgroup, please.

Come posso fare?
int** e = new int* [i];
for (int k=0; k<i; ++i)
  e[k] = new int [j];
es.
e[i][j] = Value;
ricorda che la deallocazione deve avvenire in
ordine inverso.
P.s.
  Anche questa e` da mettere nella FAQ.
  Mi sa che comincio a scriverla per le prime tre domande della
  Hit Parade!!!!! Controllo cosa c'e` nella FAQ su 
www.programmazione.it
  e poi vedro` il da farsi.
 C'e` qualcuno disposto a spendere una mezz'oretta e collaborare?
-----------------------------------------------
  Paolo Marotta
  Computer Science, University of Pisa
  home:   
http://www.cli.di.unipi.it/~marotta
-----------------------------------------------

 Come posso fare?
Eccoti un semplice esempio:
#include <iostream>
#include <iomanip>
using namespace std;
int main()
{
    int **Matrice = new int * [ 10 ];
    for ( int i = 0; i < 10; ++i )
        Matrice[ i ] = new int [ 10 ];
    for ( int i = 0; i < 10; ++i )
        for ( int j = 0; j < 10; ++j )
            Matrice[ i ][ j ] = ( i + 1 ) * ( j + 1 );
    for ( int i = 0; i < 10; ++i )
    {
        for ( int j = 0; j < 10; ++j )
            cout << setw( 3 ) << Matrice[ i ][ j ] << " ";
        cout << endl;
    }
    for ( int i = 0; i < 10; ++i )
        delete [] Matrice[ i ];
    delete [] Matrice;
}
EMG

  C'e` qualcuno disposto a spendere una mezz'oretta e collaborare?
Eccomi. Che devo fare?
EMG



Basterebbe dividersi i compiti per evitare di fare due volte
la stessa cosa...
Ecco le domande (le prime che mi passano x la testa) x cui scrivere la
faq
1) Sto cercando un compilatore C++, dove lo trovo?
2) Che editor posso usare x i miei programmi
3) quale debugger?
4) dove posso trovare un tutorial C++
     (non per farmi pubblicita`, ma per evitare le solite risposte...
      si dovrebbero indicare eventuali risorse in inglese)     
5) dove posso trovare documentazione su TSL
     (basta un rimando a 4)
6) Quali libri mi consigliate?
7) come posso allocare una matrice per usare la notazione M[i][j]?
8) Se separo le definizioni di un template dalla sua dichiarazione
     ponendole in file separati (.h e .cpp) non riesco ad istanziarlo.
Se hai (avete) altre domande aggiungiamole a questa lista, e
dopo una eventuale riorganizzazione (e preliminare consultazione
della FAQ di Roberto Gerola) ci dividiamo le domande.
Alla fine rivediamo insieme il materiale prodotto e poi si
passa alla pubblicazione, eventualmente come un
tutt'uno con il materiale di Gerola (se e` d'accordo!).
Paolo
Tutto sommato in al piu` pochissime ore (complessive) il lavoro sara`
concluso.


 faq
Ok. Vediamo quanti sono disposti a collaborare (fatevi avanti!) e poi
dividiamole.
EMG

 dividiamole.
Lo farei volentieri, ma temo di non avere nè molto tempo nè conoscenze
sufficienti per dare un grande contributo.
Aggiungerei 2 domande però, magari non troppo frequenti ma forse utili:
1) Come faccio a passare array a funzioni se non posso sapere la dimensione
del parametro attuale?
2) Come faccio a usare la memoria dinamica? Devo deallocarla manualmente?
Che tra l'altro andrebbero bene anche per il C.
Anzi, mi viene in mente anche un'altra:
3) Vengo dal linguaggio X. Mi conviene imparare il C++?
--
Alessandro Monti