vector.erase-它总是删除我的最后一个元素
vector.erase - it deletes my last element always
作为一名业余程序员,我第一次来这里时遇到了很多问题。我想做一个虚拟模型商店。我可以添加新项目,检查库存,所有这些都在一个向量中,但当我想删除特定项目时(通过producer
&name
&scale
),它总是删除最后一个元素。
#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);
};
这是标题。
#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;
}
这是主要的。case 3
是删除thingamajack
的问题。它总是删除向量中的最后一个元素。if(name=name等等)工作正常,测试了三次以确保没有问题。我写的vectorr.erase
似乎都无法按我希望的方式工作。
很抱歉代码混乱,我可能在case 3
之前做错了什么,忽略case 4
的排序,还没有实现,非常感谢您的帮助,谢谢!
在情况2中,您已经编写了
std::vector<model>::iterator it = vectorr.begin()
而你定义了
vector<machete> vectorr;
我想你混淆了弯刀和模型。
相关文章:
- 获取用C/C++打印的最后一个字符串
- 为什么我的最后一个 ELSE 条件无法正确执行
- Lower_bound不适用于具有 3 个元素的向量的最后一个元素
- 仅显示链表的最后一个元素
- 测试迭代器是否位于列表中的最后一个
- 使用 map.end() 访问 map 的最后一个元素
- 如何知道地图中的最后一个元素是否被删除?
- C++模板部分特化:为什么我无法匹配可变参数模板中的最后一个类型
- vector.erase-它总是删除我的最后一个元素
- 我在一个简单控制台程序(c++)中的第一列代码最终成为我的最后一列
- 我读了map.erase(map.end());删除地图的最后一个元素。但是最后一个元素是什么?它是否基于元素的插入顺序?
- 为什么我可以索引到数字超出范围的三维数组中,但仍然可以访问数组中的最后一个数字
- 我怎么知道我在Qt中的最后一个对象
- 我不明白这段代码的最后一个输出
- 我的最后一个正则表达式不起作用,但我无法弄清楚原因
- 为什么我要把档案里的最后一个字读两遍
- 我正在尝试递归地实现一个程序。我只是不明白为什么我的最后一行被执行了两次
- 有人能给我解释一下这个函数的最后一个参数吗?
- 我如何传递一个直接的4位值到_mm256_blend_pd的最后一个参数
- 为什么我的for循环会跳过数组中的最后一个值