gpt4 book ai didi

c++ - 在 C++ 的构造函数中实例化一个列表

转载 作者:行者123 更新时间:2023-11-28 00:59:12 24 4
gpt4 key购买 nike

我试图在 C++ 的类中构建一个列表,但我不明白我做错了什么

class Car(){  
public:
Car();
~Car();
list <Objects> myList; //a list of some objects from one of my classes
list <Objects>::iterator it;
void addObject(Object obj);
void removeObject(Object obj);
};

Car::Car(){
//what do I need to add to initialize the list
it = myList.begin();
};

void addObject(Object obj){
//myList.insert(it, obj);
myList.push_back(obj);
}

void removeObject(Object obj){
myList.remove(obj);
}

我没有收到任何构建错误,但是调试器对我大喊“表达式:列表插入迭代器超出范围”。我相信我没有在我的构造函数中初始化列表,这就是原因。我该怎么做?谢谢

现在通过插入对所有内容进行了排序,但是我在从同一个列表中删除时遇到了问题。
我认为这与这些“可爱”的指针有关。为了一劳永逸地做到这一点,我主要创建了一个 Car 类型的对象。然后我创建了一些 Object 类型的对象。然后我使用上面的代码将它们添加到我的 Car 对象中。为什么我不能删除它们?最重要的是:我使用这段代码创建了多少个相同对象的实例:

int main(){  
Car myCar = Car();
Object one = Object("first object");
Object two = Object("second object");
Car.addObject(one);
Car.addObject(two);
Car.removeObject(one); //doesn't work???
}

有人可以向我解释我做错了什么吗?我按值(value)传递对象有什么关系吗?上面的正确做法是什么?
谢谢。

最佳答案

您的列表将在您的构造函数中自动初始化,并且您不需要迭代器作为类成员。要将您的对象添加到列表中,您只需调用 push_back:

void addObject(Object obj){  
myList.push_back(obj);
}

参见 http://www.cplusplus.com/reference/stl/list/push_back/

要在特定位置插入,请参阅:http://www.cplusplus.com/reference/stl/list/insert/

如果你要任意决定在哪里插入你的新对象,那么你将需要确定每次使用 find() 的位置,如果你总是在开头或结尾插入,那么调用

// insert in arbitrary location
myList::iterator it = myList.find(val);
myList.insert(it, obj);
// OR insert at beginning
myList.push_front(obj); // to insert at end see above

关于c++ - 在 C++ 的构造函数中实例化一个列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9659940/

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