Je pense à rendre la structure de données vectorielles plus efficace. Supposons que pour un type de données générique T ... alors que nous ajoutons un nouvel élément au vecteur, le vecteur std :: actuel consiste à réallouer un nouveau bloc de mémoire de n + 1 éléments.Rendre un vecteur plus efficace tout en ajoutant des éléments
Ce que je veux faire ...
j'ai écrit un petit programme:
#include<iostream>
using namespace std;
int main()
{
int *i,*j;
i=new int;
cout<<i;
delete i;
j=new int ;
cout<<j;
delete j;
return 0;
}
Les deux emplacements mémoire sont les mêmes ...
maintenant Ce que je pense est que le premier je vais allouer de la mémoire pour le type de données génériques comme ceci:
T *temp=new T;
maintenant adresse mémoire de temp à l'adresse du dernier élément du vecteur .... Si elles diffèrent par sizeof (T)
alors je vais ajouter le nouvel élément lui-même .... sinon le faire de la manière std::vector
le fait ....
Donc, il réduit le coût de la copie de tous les éléments ... si les données sont volumineuses, cela peut faire une différence significative ...... !!
Pls me dire si je suis sur la bonne voie ...
Les vecteurs ne peuvent pas faire ce que vous décrivez parce que cela provoquerait que 'push_back' ne remplisse pas sa complexité de temps constant amorti. Les vecteurs sont très efficaces, en particulier avec C++ 11, où les éléments peuvent être déplacés au lieu d'être copiés lorsqu'une réallocation se produit. De plus, vos astuces d'adresse mémoire ne sont en aucun cas garanties, donc non, cela ne fonctionnera pas du tout. – chris
['std :: vector :: reserve'] (http://fr.cppreference.com/w/cpp/container/vector/reserve) – BoBTFish
Non ... j'ai essayé ceci avec ma propre implémentation de vecteur .. L'opération de suppression sera de complexité temps constante ... ce que je fais est, seulement s'il y a assez d'espace adjacent au dernier élément du vecteur, je dis de ne pas copier tout le matériel à un diff. emplacement, mais pour l'affecter à côté du dernier élément lui-même .... – PRP