搜索矢量键会丢失

Vector key gets lost when searching through it

本文关键字:搜索      更新时间:2023-10-16

我的同类中有一个向量数组,该数组是将指针固定到特定对象指针的指针。

类应包含允许添加,删除和查找内部对象的方法。现在的课程看起来像这样:

class VectorKontener: public Kontener <VectorKontener> {
protected:
    int find(Obiekt &n) {
        cout << endl << "---------------------" << endl << "Running find method loop!" << endl;
        for (int i = 0; i < stos.size(); i++) {
            cout << "Now running for id: " << stos[i]->getId() << endl;
            if (stos[i] == &n) return i;
        }
        return -1;
    }
public:
    VectorKontener::VectorKontener(Obiekt &n) {
        add(n);
    }
    VectorKontener add(Obiekt &n) {
        cout << "Adding: " << n.getId() << endl;
        stos.push_back(&n);
        return *this;
    }
    int checkPresent(Obiekt &n) {
        return this->find(n) != -1;
    }
    VectorKontener remove(Obiekt &n) {
        if (this->checkPresent(n)) {
            stos.erase(stos.begin() + this->find(n));
        }
        else
            cout << endl <<"ELEMENT NOT IN CONTAINER" << endl;
        return *this;
    }
    VectorKontener display() {
        cout << endl << "===DISPLAY===" << endl;
        for (int i = 0; i < stos.size(); i++) {
            stos[i]->display();
        }
        return *this;
    }
};

但是,当运行以下测试数据时:

void Zad3()
{
    Obiekt 
        obj1(5), 
        obj2(23), 
        obj3(234), 
        obj4(33);

    cout << endl << "1. Class init" << endl;
    VectorKontener k1(obj1);
    cout << endl << "2. Adding other objects into array" << endl;
    k1
        .add(obj2)
        .add(obj3)
        .display();
    cout << endl << "3. Element remove attempt" << endl;
    k1
        .remove(obj2)
        .display();
    getchar();
}

输出看起来像:

1. Class init
Adding: 5
2. Adding other objects into array
Adding: 23
Adding: 234
===DISPLAY===
This object has id: 5
This object has id: 23
This object has id: 234
3. Element remove attempt
---------------------
Running find method loop!
Now running for id: 5
Now running for id: 23
---------------------
Running find method loop!
Now running for id: 5
Now running for id: 23
===DISPLAY===
This object has id: 5

输出使数组的第三个变量似乎在 find 方法(hehe)中丢失,因为它没有由其计算,尽管stos.size()显示了适当的值(2)。<<<<<<<<<<<<<<<</p>

我不是CPP专家,要远离它很远,并且知道这可能是一个非常鲁尼什的问题,但是我确实用尽了使它正常工作的方法。

任何帮助真的很棒

问题是对象的函数返回 copies ,这意味着在链式的 add中调用原始对象(在第二个和任何后续的任何后续对象)函数调用),而是在每个函数调用上创建一个临时的调用。

简单的修复是将返回值更改为参考,例如:用于添加函数:

VectorKontener& add(Obiekt &n) {

而不是

VectorKontener add(Obiekt &n) {

和其他功能的类似变化。