disabilitare il valore di riempimento vettoriale al ridimensionamento? C ++

StackOverflow https://stackoverflow.com/questions/607864

  •  03-07-2019
  •  | 
  •  

Domanda

Sono in una situazione in cui devo usare una funzione di stile c che restituisce la len copiata. Ho deciso di ridimensionare al massimo, quindi ridimensionare alla lunghezza restituita espandere le dimensioni del vettore passato come memoria

So che il ridimensionamento imposta il valore su fillValue (sempre 0?). Quindi ci sarà un'inizializzazione inutile (si spera meno di un mb ogni volta) 60 volte al secondo. C'è un modo per disabilitare l'avvio al ridimensionamento?

È stato utile?

Soluzione

Fondamentalmente no. Gli elementi nel vettore sono predefiniti costruiti su un ridimensionamento (per un numero intero questo risulta in 0).

Supponendo che tu stia utilizzando reserve () per garantire che resize () non alloca memoria, non mi preoccuperei di questo a meno che non si riveli un problema di prestazioni in seguito.

Se sei preoccupato, potresti prendere in considerazione l'idea di utilizzare un array normale e di archiviare il conteggio degli articoli in una variabile separata. Questo ti darà le migliori prestazioni.

Aggiornamento:

John ha chiesto:

  

Il costruttore è davvero garantito   azzerare quel ricordo? Pensavo che   era indefinito?

Sì e no. I tipi primitivi (int, bool, float, ecc.) Hanno costruttori predefiniti che li inizializzano a zero. Tuttavia, diversamente dalle normali classi o strutture, il compilatore non le chiama automaticamente.

es

int a;         // uninitialized
int b = int(); // initialized to 0

Poiché vector :: resize utilizza quest'ultimo modulo quando si aggiungono elementi, si garantisce che gli elementi creati verranno inizializzati correttamente su zero. Ciò vale per tutte le raccolte STL che implicitamente creano elementi.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top