First time here, an amateur programmer, I have quite a bit of issue. I want to make a virtual model shop. I can add new items, check the inventory, all in a vector but when I want to delete a specific item (by producer
& name
& scale
) it always deletes the last element.
#include <iostream>
#include <string>
#include <fstream>
#include <vector>
using namespace std;
class model
{
private:
int price;
string scale, name, producer;
public:
vector<model> vectorr;
model();
virtual ~model();
int getprice();
string getscale();
string getname();
string getproducer();
void setprice(int);
void setscale(string);
void setname(string);
void setproducer(string);
friend ostream &operator>>(ostream &stream, model &mt);
model &operator=(model &mt);
};
That's the header.
#include <iostream>
#include "header1.h"
#include <string>
#include <conio.h>
#include <vector>
using namespace std;
int main()
{
vector<machete> vectorr;
machete c;
machete t;
cout << "Welcome to the shop , what do you want to do?" << endl;
cout << "Chose your destiny : 1. Add 2.Get 3.Remove 4.Sort 0.Quit" << endl;
int menu, temp2;
string temp;
cin >> menu;
while (menu != 0) {
switch (menu) {
case 0 : cout << "Bye bye";
_getch();
exit(1);
break;
case 1 : cout << "Enter a producer" << endl;
cin >> temp;
c.setproducer(temp);
cout << "Enter a name" << endl;
cin >> temp;
c.setname(temp);
cout << "Enter a scale" << endl;
cin >> temp;
c.setscale(temp);
cout << "Enter a price" << endl;
cin >> temp2;
c.setprice(temp2);
vectorr.push_back(c);
cout << "You have succesfully added a model !" << endl;
break;
case 2 : cout << "Producer | Name | Scale | Price" << endl;
for (std::vector<model>::iterator it = vectorr.begin(); it != vectorr.end(); ++it) {
cout >> *it;
}
cout << endl;
break;
case 3 : cout << "What do you want to remove?" << endl;
cout << "Enter the producer" << endl;
string producer;
cin >> producer;
cout << "Enter the name" << endl;
string name;
cin >> name;
cout << "Enter the scale" << endl;
string scale;
cin >> scale;
for (unsigned i = 0; i < vectorr.size(); ++i) {
t.setname(vectorr[i].getnume());
t.setproducer(vectorr[i].getproducator());
t.setscale(vectorr[i].getscara());
if (t.getname() == name && t.getproducer() == producer && t.getscle() == scale) {
vectorr.erase(vectorr.begin() + i);
cout << "You have succesfully erased the " << name << " model" << endl;
break;
}
}
break;
}
cout << "Chose your destiny : 1. Add 2.Get 3.Remove 4.Sort 0.Quit" << endl;
cin >> menu;
}
return 0;
}
That's the main. case 3
is the problem deleting thingamajack
. It always deletes the last element in my vector. The if(name=name and so on) works properly, tested it three times to be sure that wasn't the problem. It appears whatever I write vectorr.erase
just won't work the way I want it to.
Sorry for the messy code, I might have done something wrong before the case 3
, ignore case 4
the sort, not implemented yet, any help is appreciated, thanks!
In case 2, you've written
std::vector<model>::iterator it = vectorr.begin()
whereas you defined
vector<machete> vectorr;
I think you've confused between machete and model.
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.