1
Я пытаюсь рефакторинга следующий код, который опирается на классические массивы C-стиле, чтобы сделать его более C++ как:Обмен уникальным_ptr в многомерном массиве C++?
fb::Block *blocks[Panel::X][Panel::Y];
void Panel::mechanics(int64_t tick) {
for (int32_t y = 1; y < Panel::Y; y++) {
for (int32_t x = 0; x < Panel::X; x++) {
fb::Block* current = blocks[x][y];
if (current -- nullptr) {
continue;
}
// Switching the 2 pointers
blocks[x][y] = blocks[x + 1][y];
blocks[x + 1][y] = current;
}
}
}
Следующий код полагается на std::array
и std::unique_ptr
. Мне нужно поменять местами 2 значения, как я делал в предыдущем коде, но я не уверен, что это правильный способ сделать это:
std::array<std::array<std::unique_ptr<fb::Block>, Panel::Y>, Panel::X> blocks;
void Panel::mechanics(int64_t tick) {
for (int32_t y = 1; y < Panel::Y; y++) {
for (int32_t x = 0; x < Panel::X; x++) {
std::unique_ptr<fb::Block>& current = blocks[x][y];
if (!current) {
continue;
}
// Swapping the 2 pointers
blocks[x][y].swap(blocks[x + 1][y]);
}
}
}
ли swap
член правильный путь для достижения этой цели?
Вы также можете выполнить 'swap (блоки [x] [y], блоки [x + 1] [y]);'. Если вы считаете, что это выглядит лучше, или если вы хотите быть похожим на общий код, который предполагает только тип Swappable. – aschepler
Разве это лучше/равно/хуже с точки зрения производительности или это то же самое, что и решение, которое я разместил? – bquenin
Возможно идентично. Но, как и любой вопрос о производительности, реальный ответ заключается в том, чтобы попробовать и сравнить производительность сборки и/или измерения. – aschepler