После нажатия на очередь в C ++, если я отредактирую данные этих элементов после, это повлияет на данные в очереди?

0

///Это мой первый раз, когда я использую STL, и у меня есть вопрос о очереди. У меня есть класс платы с несколькими ходами и массивом объекта с позициями на доске. После того, как я нажал, мне нужно сбросить плату до предыдущей позиции, но мне нужно, чтобы данные были изменены без изменений. Будет ли редактирование этого эффекта данных или доски после нажатия на эффект данных в очереди?

    board_Queue.push(dequeuedBoard);
///Move back to orginal postion 
   dequeuedBoard.moveBackwardCar(dequeuedBoard.boardCars,i);
   dequeuedBoard.moveMinus();
  • 1
    В STL думайте об операциях как о сохранении копии значения и возврате копии.
  • 0
    Для уточнения, если вы нажимаете указатель, он «копирует» указатель, так что объект orig, на который он ссылается, может быть изменен независимо от контейнера.
Показать ещё 1 комментарий
Теги:
stl
queue

1 ответ

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, он создаст копию, поэтому изменения к исходному объекту не будут применяться к ней. Если вы нажмете указатель на экземпляр, будут применены изменения оригинала, поскольку вы работаете с одним объектом.

  • 0
    Хм очень интересно. Спасибо за разъяснение! Должна быть ошибка где-то еще
  • 0
    Нашел проблему! Я правильно решал свою головоломку, просто она шла так медленно, что я никогда не задерживался на результатах, потому что это должно было произойти за считанные секунды. Случайно искал набор с помощью .count (string blah) и поместил это в свою собственную функцию. Я предполагаю, что это разрушало скорость копирования по гигантскому набору каждый раз, чтобы искать. Вытащив его из функции и поместив прямо туда, где был определен набор, я убил время, и я смог решить его менее чем за секунду.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню