///Это мой первый раз, когда я использую STL, и у меня есть вопрос о очереди. У меня есть класс платы с несколькими ходами и массивом объекта с позициями на доске. После того, как я нажал, мне нужно сбросить плату до предыдущей позиции, но мне нужно, чтобы данные были изменены без изменений. Будет ли редактирование этого эффекта данных или доски после нажатия на эффект данных в очереди?
board_Queue.push(dequeuedBoard);
///Move back to orginal postion
dequeuedBoard.moveBackwardCar(dequeuedBoard.boardCars,i);
dequeuedBoard.moveMinus();
Давайте создадим тестовый код. Для простоты я использовал вектор вместо очереди.
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, он создаст копию, поэтому изменения к исходному объекту не будут применяться к ней. Если вы нажмете указатель на экземпляр, будут применены изменения оригинала, поскольку вы работаете с одним объектом.