Схемы именования переменных для объектов в C++?

Я реализую BFS, и все, что он собирается делать, - это просматривать упорядоченное дерево, чтобы найти кратчайшее решение головоломки.

Что я буду делать, так это создавать объект Snapshot, который содержит текущую позицию каждой части головоломки. Я добавлю этот объект Snapshot в очередь и проверю, является ли он решением. Однако я создаю эти снимки на лету. Так есть ли какой-то способ, который автоматически генерирует имена объектов Snapshot, когда они помещаются в очередь?

или мне нужно отслеживать, сколько объявлений я сделал, и просто жестко закодировать его, сказав ...

Снимок snapshot2; Снимок snapshot3; Снимок snapshot4; так далее..

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
2
0
579
6
Перейти к ответу Данный вопрос помечен как решенный

Ответы 6

Вы можете использовать очередь из стандартной библиотеки шаблонов, а затем создать функцию, которая создает объект Snapshot и помещает его в очередь. Дайте этой функции статическую переменную, которая увеличивается каждый раз, когда вызывается и записывается в поле id снимка.

http://www.csci.csusb.edu/dick/samples/stl.html

http://www.cppreference.com/wiki/stl/queue/start

но проблема в том, что когда я создаю объекты моментальных снимков и просто использую какое-то общее имя, например Snapshot snapshot; И я добавляю это в очередь. Теперь, поскольку я буду использовать цикл, он объявит его с тем же именем. Это позволит мне это сделать?

Tomek 19.10.2008 07:39

Если вы объявите его внутри цикла, он должен создаваться заново на каждой итерации.

Jeff Linahan 19.10.2008 07:40

Думаю, для этого нам нужна дополнительная информация. Если вы просто выталкиваете их из очереди, почему вас волнует, как они называются? Объекты в очереди обычно не нумеруются, если вы не реализуете это в массиве.

Извините, вся эта штука с очередью вызывает ненужную путаницу.

Возьмем другой пример. Итак, для этой головоломки количество частей в головоломке указывается пользователем. Я разрабатываю программу так, что каждая Часть головоломки представляет собой отдельный объект.

Итак, когда я приступаю к созданию этих частей, могу ли я использовать какие-то схемы именования переменных, чтобы именовать эти части. так что-то вроде этого просто в качестве примера ...

for (int i-0; i < constraint; i++)
Piece "Piece"+i = new Piece();

Вы не можете динамически создавать имена переменных в C++, по крайней мере, без некоторого (воображаемого?) Дополнения.

edit: Кстати, я выполнил задание, которое, как я полагаю, похоже на ваше в классе AI, где мы рассмотрели такие основы, как BFS, DFS и A *. Ни разу не было необходимости иметь объекты с уникальными именами для «снимков», и я использовал очереди.

edit2: и если вам нужно отслеживать, сколько у вас есть снимков, создайте переменную count, которая увеличивается каждый раз, когда вы создаете объект.

да, я подумал об этом еще немного, и твое право это не обязательно

Tomek 19.10.2008 09:07

Я думаю, вы спрашиваете, как создать и сохранить много объектов, когда не знаете, сколько их будет.

Вам нужно создать массив объектов. Затем вы можете получить к ним доступ как снимок [1], снимок [2] ... снимок [i].

да, извините, я действительно не знал, как правильно это сказать. Спасибо за информацию

Tomek 19.10.2008 09:06
Ответ принят как подходящий

Есть способ - использовать Оператор вставки токена препроцессора. Это позволяет вам создать имя на основе переменной, поэтому вы должны указать:

#define S(variable) snapshot#variable

и вы сможете создавать переменные с именами snapshot1, snapshot2 и т. д .:

Snapshot S(1)
Snapshot S(2)

Однако я не уверен, что это то, что вам действительно нужно, возможно, я однажды использовал эту технику на практике, и это было для генератора кода.

Другие вопросы по теме