Visualizzazione dei risultati da 1 a 7 su 7
  1. #1

    [C++]Ottimizzazione gestione vettori

    Riprendo la dichiarazione e implementazione delle classi citate in questo post:
    http://forum.html.it/forum/showthrea...8#post11079748
    e aggiungo le modifiche sottocitate.

    Se nella dichiarazione della classe Computer.h ho dichiarato un vettore in questo modo:
    codice:
    private:
       vector<Computer> vComputer;
    e poi ho aggiunto i metodi:
    codice:
    void addComputer(Computer _computer);
    vector<Computer> getVectorComputer();
    Nella classe Computer.cpp ho implementato i metodi in questo modo:
    codice:
    void Computer::addComputer(Computer _computer){
    	vComputer.push_back(_computer);
    }
    
    vector<Computer> Computer::getVectorComputer(){
    	return vComputer;
    }
    tutto ok funziona, ma se per caso questo vettore fosse molto grande e non vorrei passarlo per valore quale tecnica dovrei usare?
    Grazie per il supporto.

  2. #2
    bisognerebbe vedere come viene implementato il costruttore di copia, in ogni caso puoi istanziare un puntatore a vector invece che un vector. Poi crei un alias per eseguire le operazioni sull'oggetto.
    ciao
    sergio

  3. #3
    Ho più o meno capito quindi dovrei istanziare un puntatore a un vector così:
    codice:
    private:
       vector<Computer>* vComputer;
    e poi come faccio a creare un alias?
    Grazie

  4. #4

    Re: [C++]Ottimizzazione gestione vettori

    Originariamente inviato da mlipreri
    Riprendo la dichiarazione e implementazione delle classi citate in questo post:
    http://forum.html.it/forum/showthrea...8#post11079748
    e aggiungo le modifiche sottocitate.

    Se nella dichiarazione della classe Computer.h ho dichiarato un vettore in questo modo:
    codice:
    private:
       vector<Computer> vComputer;
    e poi ho aggiunto i metodi:
    codice:
    void addComputer(Computer _computer);
    vector<Computer> getVectorComputer();
    Nella classe Computer.cpp ho implementato i metodi in questo modo:
    codice:
    void Computer::addComputer(Computer _computer){
    	vComputer.push_back(_computer);
    }
    
    vector<Computer> Computer::getVectorComputer(){
    	return vComputer;
    }
    tutto ok funziona, ma se per caso questo vettore fosse molto grande e non vorrei passarlo per valore quale tecnica dovrei usare?
    Grazie per il supporto.
    Puoi restituire il puntatore a vComputer od il suo riferimento:
    codice:
    vector<Computer> * Computer::getVectorComputerPointer(){
    	return &vComputer;
    }
    
    vector<Computer> & Computer::getVectorComputerRef(){
    	return vComputer;
    }
    in entrambi i casi viene NON viene copiato il vettore.
    Ma attenzione:

    codice:
    void TestComputer (Computer * theComputer){
    	typedef vector<Computer> ComputerContainer;
    	ComputerContainer * aComputerContainerPointer = theComputer->getVectorComputerPointer (); // aComputerContainerPointer punta al membro vComputer di Computer
    	ComputerContainer & aComputerContainerRef = theComputer->getVectorComputerRef (); // aComputerContainerRef punta al membro vComputer di Computer
    	ComputerContainer aComputerContainerCopy = theComputer->getVectorComputerRef (); // aComputerContainerCopy è una copia del membro vComputer di Computer;
    }
    nel terzo caso, pur chiamando getVectorComputerRef, il chiamante costruisce una copia di vComputer di Computer.

  5. #5
    un reference alias può essere

    vector<Computer> & vComputer_ref = *vComputer;

    se modifiche vComuper_ref modifichi anche vComputer

    ciao
    sergio

  6. #6

    Re: Re: [C++]Ottimizzazione gestione vettori

    Originariamente inviato da MacApp
    Puoi restituire il puntatore a vComputer od il suo riferimento:
    codice:
    vector<Computer> * Computer::getVectorComputerPointer(){
    	return &vComputer;
    }
    
    vector<Computer> & Computer::getVectorComputerRef(){
    	return vComputer;
    }
    in entrambi i casi viene NON viene copiato il vettore.
    Ma attenzione:

    codice:
    void TestComputer (Computer * theComputer){
    	typedef vector<Computer> ComputerContainer;
    	ComputerContainer * aComputerContainerPointer = theComputer->getVectorComputerPointer (); // aComputerContainerPointer punta al membro vComputer di Computer
    	ComputerContainer & aComputerContainerRef = theComputer->getVectorComputerRef (); // aComputerContainerRef punta al membro vComputer di Computer
    	ComputerContainer aComputerContainerCopy = theComputer->getVectorComputerRef (); // aComputerContainerCopy è una copia del membro vComputer di Computer;
    }
    nel terzo caso, pur chiamando getVectorComputerRef, il chiamante costruisce una copia di vComputer di Computer.
    ok! Ma perchè se faccio:
    codice:
    aComputerContainerPointer.size()
    mi da errore?

  7. #7
    perchè devo fare:
    codice:
    aComputerContainerPointer->size()

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.