gpt4 book ai didi

c++ - 搜索时 vector 键丢失

转载 作者:行者123 更新时间:2023-11-28 04:53:12 25 4
gpt4 key购买 nike

我的类中有一个 vector 数组,用于保存指向特定对象指针的指针。

该类应包含允许添加、删除和查找内部对象的方法。现在的类如下所示:

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

尽管 stos.size() 显示正确的值 (2)。

我不是 cpp 专家,公平地说远非如此,我知道这可能是一个相当笨拙的问题,但我真的没有办法让它正常工作。

任何帮助都会非常棒

最佳答案

问题在于函数返回对象的拷贝,这意味着在链式add 调用中原始对象未被修改(在第二个和任何后续函数中调用),而是在每个函数调用时创建一个临时的,然后立即销毁。

简单的解决方法是将返回值更改为引用,例如:对于添加函数:

VectorKontener& add(Obiekt &n) {

代替

VectorKontener add(Obiekt &n) {

其他功能也有类似的变化。

关于c++ - 搜索时 vector 键丢失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47733666/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com