在C ++中推送队列后,如果我之后编辑项目数据会影响队列中的数据吗?

时间:2014-12-04 04:04:53

标签: c++ stl queue

/// 这是我第一次使用STL,我对队列有疑问。我有一个具有多个移动的棋盘类和具有棋盘位置的对象阵列。推后我需要将电路板重置为之前的位置,但我需要将推送的数据保持不变。在推送影响队列中的数据后编辑此数据效果还是电路板?

    board_Queue.push(dequeuedBoard);
///Move back to orginal postion 
   dequeuedBoard.moveBackwardCar(dequeuedBoard.boardCars,i);
   dequeuedBoard.moveMinus();

1 个答案:

答案 0 :(得分:0)

让我们创建一些测试代码。为简单起见,我使用了向量而不是队列。

class CT{
public:
    int a;
};


int _tmain(int argc, _TCHAR* argv[])
{
    CT ct, *pct;

    ct.a = 1;
    std::vector<CT> vec;
    vec.push_back(ct);
    ct.a = 2;
    std::cout << vec[0].a<<std::endl;

    pct = new CT;
    pct->a = 1;
    std::vector<CT*> pvec;
    pvec.push_back(pct);
    pct->a = 2;
    std::cout << pvec[0]->a<<std::endl;
    pvec.clear();
    delete pct;

    return(0);

}

编译和执行后,你会得到

1
2

这是因为如果你将对象实例放到STL容器中,它将创建一个副本,因此对原始对象的更改将不适用于它。如果将指针推送到实例,则会应用原始更改,因为您使用了一个对象。