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

标签 c++ c vector structure pointer-to-array

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

我的代码中有一个对象(结构)指针,当我修改某些内容时,为了跟踪其历史记录,我将其保存在对象 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/

相关文章:

c - C 中的 free() 函数对我不起作用

c++ - STL vector 、指针和类

c++ - Qt中如何检查文件是否被数据库驱动占用

c++ - 当我尝试更改远程 Linux 节点上 Eclipse 中的设置时,X Server 崩溃

c++ - C/C++ Linux : fastest write of a fixed chunk of memory to file (1 Hz)

c++ - 如何根据 Valgrind 输出进一步调试

C++ 通用函数调用器

c - Regexc - 段错误

c++ - 根据某些标准拆分 std::vector

c++ - 为什么可以从函数返回 'vector'?