gpt4 book ai didi

c++ - 具有对象指针的对象 vector

转载 作者:行者123 更新时间:2023-11-30 18:57:31 25 4
gpt4 key购买 nike

快速问一下大家,我有以下问题:

我的代码中有一个对象(结构)指针,当我修改某些内容时,为了跟踪其历史记录,我将其保存在对象 vector (堆栈)中。所以我正在尝试这样做。

{
Object* myObject;
vector<Object> stack;


stuffHappensInObject(*myObject);
stack.push_back(myObject);

if(IclickLoadLast){
myObject = stack.at(size-1);
}
}

我在 push_back 调用方面遇到问题,我不知道是否可以将新对象中的所有结构变量放入堆栈中。我怎样才能做到这一点?

最佳答案

首先不要使用指针,这里没有必要。该问题是由于您尝试将 Object* 添加到 Object 的 vector 而引起的(更不用说在取消引用一个对象时快速进入 UB-land)未初始化的指针)。这是固定代码:

{
Object myObject;
std::vector<Object> stack;


stuffHappensInObject(myObject);
stack.push_back(myObject);

if(IclickLoadLast){
myObject = stack.at(stack.size() - 1);
}
}

我还将 size 更改为 stack.size(),这是您可以使用的 std::vector 的有效方法。另外,看看std::stack它提供了更多类似堆栈的操作:

{
Object myObject;
std::stack stack;


stuffHappensInObject(myObject);
stack.push(myObject);

if(IclickLoadLast){
myObject = stack.top();
}
}

在这两种情况下,如果您使用的是 C++11,我建议您使用 std::vector::emplace_backstd::stack::emplace而不是 push_backpush

关于c++ - 具有对象指针的对象 vector ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20647655/

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