Eu "herdei" muito código legado usando sua primeira variante, e também escrevi muito código usando as classes Point2D
e Point3D
(em geral, o mesmo que você Vector<int>
é). A primeira variante sempre leva a funções com muitos parâmetros e muitas construções repetidas, nas quais a simples adição de vetor ou multiplicação escalar é repetida várias vezes em várias linhas de código.
O uso de classes de pontos ou vetores 2D, no entanto, especialmente quando você precisa de muitas operações de vetores, torna o código muito mais limpo, conciso, melhor legível e fácil de manter. Se você deve usar uma existente Vector<int>
ou escrever sua própria Point
classe, é impossível dizer sem saber mais sobre os detalhes do seu código, mas, em geral, se uma classe existente sofre sua necessidade, por que não reutilizá-la? Os métodos adicionais que você não precisa, típicos, não machucam. Mas não usar nenhuma classe de ponto / vetor 2D é quase sempre que a decisão errada. E no seu exemplo acima: se você tem influência sobre a element.move
função, IMHO é melhor projetá-la de uma maneira que você possa chamar em element.move(offset)
vez de element.move(offset_x, offset_y)
.
Por exemplo, digamos que você precise de uma matriz de coordenadas de ponto e use um a std::vector
. No primeiro caso, você precisará de duas std::vector<int>
variáveis, precisará garantir que esses dois vetores estejam "sincronizados" e que todos os novos elementos sejam adicionados, encontrem elementos existentes e passem por esses elementos, necessitando de duas linhas de código. de um quando você optou por usar um std::vector<Point2D>
.