2013-02-16 4 views
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 член правильный путь для достижения этой цели?

+1

Вы также можете выполнить 'swap (блоки [x] [y], блоки [x + 1] [y]);'. Если вы считаете, что это выглядит лучше, или если вы хотите быть похожим на общий код, который предполагает только тип Swappable. – aschepler

+0

Разве это лучше/равно/хуже с точки зрения производительности или это то же самое, что и решение, которое я разместил? – bquenin

+0

Возможно идентично. Но, как и любой вопрос о производительности, реальный ответ заключается в том, чтобы попробовать и сравнить производительность сборки и/или измерения. – aschepler

ответ

 Смежные вопросы

  • Нет связанных вопросов^_^