Comme la plupart d'entre vous suivent peut-être ma ligne de questions, je suis en train de créer un programme capable de sérialiser plusieurs structs dans un fichier .dat, de les relire en chargeant sa sérialisation, d'en éditer le contenu, puis réécrivez-les dans le fichier et ainsi de suite. C'est un programme d'inventaire que j'essaie de faire et je ne peux pas le faire fonctionner pour la vie de moi.Pourquoi la taille de mon vecteur est-elle si importante lorsque je charge la sérialisation à partir d'un fichier?
Le fichier en cours de chargement est vide. Mon programme prend environ 10 secondes pour charger et maintenant je sais pourquoi. C'est parce que la taille de mon vecteur est de 250 000. Oh attends ... cette fois je l'ai couru la taille de mon vecteur était de 5 172 285. C'est un très gros vecteur plein de structures. Il n'y a pas d'erreurs d'exécution ou de compilation, mais je suis sûr que je fais quelque chose de mal. Le fichier que je charge est complètement vide aussi.
code:
// Project 5.cpp : main project file.
#include "stdafx.h"
#include <iostream>
#include <fstream>
#include <string>
#include <vector>
#include <algorithm>
using namespace System;
using namespace std;
#pragma hdrstop
int checkCommand (string line);
template<typename T>
void writeVector(ofstream &out, const vector<T> &vec);
template<typename T>
vector<T> readVector(ifstream &in);
struct InventoryItem {
string Item;
string Description;
int Quantity;
int wholesaleCost;
int retailCost;
int dateAdded;
} ;
int main(void)
{
cout << "Welcome to the Inventory Manager extreme! [Version 1.0]" << endl;
ifstream in("data.dat");
if (in.is_open()) { cout << "File \'data.dat\' has been opened successfully." << endl; } else { cout << "Error opening data.dat" << endl; return 0;}
cout << "Loading data..." << endl;
vector<InventoryItem> structList = readVector<InventoryItem>(in);
cout <<"Load complete." << endl;
while (1)
{
string line = "";
cout << "There are currently " << structList.size() << " items in memory.";
cout << endl;
cout << "Commands: " << endl;
cout << "1: Add a new record " << endl;
cout << "2: Display a record " << endl;
cout << "3: Edit a current record " << endl;
cout << "4: Exit the program " << endl;
cout << endl;
cout << "Enter a command 1-4: ";
getline(cin , line);
int rValue = checkCommand(line);
if (rValue == 1)
{
cout << "You've entered a invalid command! Try Again." << endl;
} else if (rValue == 2){
cout << "Error calling command!" << endl;
} else if (!rValue) {
break;
}
}
system("pause");
return 0;
}
int checkCommand (string line)
{
int intReturn = atoi(line.c_str());
int status = 3;
switch (intReturn)
{
case 1:
break;
case 2:
break;
case 3:
break;
case 4:
status = 0;
break;
default:
status = 1;
break;
}
return status;
}
template<typename T>
void writeVector(ofstream &out, const vector<T> &vec)
{
out << vec.size();
for(vector<T>::const_iterator i = vec.begin(); i != vec.end(); i++)
{
out << *i;
}
}
ostream &operator<<(ostream &out, const InventoryItem &i)
{
out << i.Item << i.Description;
out << i.Quantity;
out << i.wholesaleCost << i.retailCost;
out << i.dateAdded;
return out;
}
istream &operator>>(istream &in, InventoryItem &i)
{
in >> i.Item >> i.Description;
in >> i.Quantity;
in >> i.wholesaleCost >> i.retailCost;
in >> i.dateAdded;
return in;
}
template<typename T>
vector<T> readVector(ifstream &in)
{
size_t size;
in >> size;
vector<T> vec;
vec.reserve(size);
for(unsigned int i = 0; i < size; i++)
{
T tmp;
in >> tmp;
vec.push_back(tmp);
}
return vec;
}
Quelqu'un peut-il simplement me montrer comment transformer ce pour un programme qui peut réellement écrire des vecteurs sérialisés pleine de struct dans un fichier, puis les relire je peux les éditer et les stocker pour les charger plus tard? Oh mon dieu quelle promenade ça a été!
MERCI pour toute aide que vous pouvez fournir!
mieux essayer de faire vos devoirs par vous-même – jab
Il est correct de poser des questions sur des sujets de devoirs, l'étiquette est de ne pas résoudre le problème et que pour donner des conseils et des suggestions quant au problème. Il peut être décourageant de ne pas avoir d'aide du tout lorsque vous essayez d'apprendre –