c++ - vector.erase - 它总是删除我的最后一个元素

标签 c++ vector erase

第一次来这里,业余程序员,我有很多问题。我想做一个虚拟模型店。我可以添加新项目、检查库存,所有这些都在一个 vector 中,但是当我想删除特定项目时(通过 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;
}

这是主要的。 案例 3 是删除 thingamajack 的问题。它总是删除我 vector 中的最后一个元素。 if(name=name and so on) 工作正常,对其进行了三次测试以确保这不是问题所在。看起来无论我写什么 vectorr.erase 都不会按照我想要的方式工作。

抱歉乱七八糟的代码,我可能在case 3之前做错了,忽略case 4排序,还没有实现,感谢任何帮助,谢谢!

最佳答案

在情况 2 中,您已经编写了

std::vector<model>::iterator it = vectorr.begin()

而你定义

vector<machete> vectorr;

我认为您混淆了弯刀和模型。

关于c++ - vector.erase - 它总是删除我的最后一个元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20839290/

相关文章:

c++ - 在 C++ 中使用 ofstream 打开现有的 .doc 文件

c++ - 与全局数组相比,为什么在堆中为局部数组分配内存更快?

结构的c++ vector 和从文件中读取

python - 类型映射资源以及将列表转换为 vector (以及反之)

string - R:根据元素长度从向量中删除元素

actionscript-3 - 内存使用量较少的位图数据替代方案?

c++ - 从 vector 中删除 opencv rect 对象

c++ - 从 unordered_multiset 中只删除一项

c++ - 在 C++ 中取消链接与删除

c++ - 如何处理覆盖某些函数名称的 WinAPI 宏?