/// 这是我第一次使用STL,我对队列有疑问。我有一个具有多个移动的棋盘类和具有棋盘位置的对象阵列。推后我需要将电路板重置为之前的位置,但我需要将推送的数据保持不变。在推送影响队列中的数据后编辑此数据效果还是电路板?
board_Queue.push(dequeuedBoard);
///Move back to orginal postion
dequeuedBoard.moveBackwardCar(dequeuedBoard.boardCars,i);
dequeuedBoard.moveMinus();
答案 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容器中,它将创建一个副本,因此对原始对象的更改将不适用于它。如果将指针推送到实例,则会应用原始更改,因为您使用了一个对象。