Module C++ INSA 4AE
Find a file
2023-12-06 20:35:10 +01:00
exercice Rewrote cmake. Added multiple target for both the td and exercices. 2023-09-25 08:59:27 +02:00
td TD5 finished. 2023-10-04 14:39:30 +02:00
tp TP2, Exercice 1. 2023-12-06 20:35:10 +01:00
.gitignore Etape 5 2023-09-18 08:57:37 +02:00
CMakeLists.txt Added multiple tp management. Moved tp to tp1. Created tp2 with simple Hello World program. 2023-12-06 19:58:31 +01:00
LICENSE Initial commit 2023-09-13 15:01:39 +02:00
README.md Added multiple tp management. Moved tp to tp1. Created tp2 with simple Hello World program. 2023-12-06 19:58:31 +01:00
run.bat Added TD2 and done question 1. Added Windows Support for run script. 2023-10-02 22:26:27 +02:00
run.sh Rewrote cmake. Added multiple target for both the td and exercices. 2023-09-25 08:59:27 +02:00

Module C++ INSA 4AE

Compiler le projet

Préparer la compilation

Pour compiler le projet je recommande CMake, mais il est possible d'utiliser directement 'g++'/'gcc'. Une simple commande vous permet de préparer les fichiers dépendant de l'étape pour le td ou l'exercice :

mkdir build
cd build
cmake -DETAPE=2 -DTD=1 -DTP=1 ..

Dans cet exemple, l'étape 2 du dossier exercice, le td 1 du dossier td et le tp 1 du dossier tp seront construits.

Lancer la compilation

Il suffit ensuite de construire l'executable dans le dossier désiré

cmake --build . --target <target_name>

<target_name> étant soit td_insa, exercice_insa ou tp_insa

Conseil pour compiler et executer efficacement

Je vous suggère d'aller dans le dossier contenant l'executable dès que les deux étapes sont réalisées. Il vous suffit ensuite de lancer le script .sh ou .bat pour à la fois compiler et executer le code.

Pour cela rendez vous à la racine du projet après avoir crée et préparer le build :

./run.sh <target_name>

Pour GNU GCC/G++ sur Linux

./run.bat <target_name>

Pour Powershell sur Windows

run.bat <target_name>

Pour CMD sur Windows

<target_name> étant soit td_insa, exercice_insa ou tp_insa

Test des allocations entre la bibliothèque standard et mon implémentation

Voici le code testé :

std::vector<int> vectStd;
Vector<int> vectYoyo;
int capacityStd(0), capacityYoyo(0);
size_t tempCapacityStd(0), tempCapacityYoyo(0);
for(int i=0; i<15000; i++)
{
    vectYoyo.PushBack(i);
    vectStd.push_back(i);
    if(tempCapacityStd != vectStd.capacity())
        capacityStd++;
    if(tempCapacityYoyo != vectYoyo.Capacity())
        capacityYoyo++;
    tempCapacityStd = vectStd.capacity();
    tempCapacityYoyo = vectYoyo.Capacity();
}
std::cout << "Total Yoyo Reallocations: " << capacityYoyo << "\tFinal Capacity: " << tempCapacityYoyo << std::endl;
std::cout << "Total Std Reallocations: " << capacityStd << "\tFinal Capacity: " << tempCapacityStd << std::endl;

Avec le résultat :

Total Yoyo Reallocations: 15    Final Capacity: 16384
Total Std Reallocations: 25     Final Capacity: 18207

Mon implémentation possède donc moins de réallocations, ainsi qu'une capacité finale moins grande. (Par comparaison, une simple implémentation augmentant la capacité _capacity++ à chaque push_back() aurait autant de réallocation que de capacité finale. Bien qu'une capacité finale moins élevée.)