快速问一下大家,我有以下问题:
我的代码中有一个对象(结构)指针,当我修改某些内容时,为了跟踪其历史记录,我将其保存在对象 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_back
或 std::stack::emplace
而不是 push_back
和 push
。
关于c++ - 具有对象指针的对象 vector ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20647655/