Тип данных C ++ лучше всего подходит для таких физических векторов, как скорость - PullRequest
0 голосов
/ 22 января 2020

Начинающий программист здесь. Я хочу найти лучшую структуру данных в C ++ для работы с физическими векторами, такими как положение, скорость и т. Д. c.

В настоящее время я использую std::array<double,dimension>, где размерность фиксирована в программе, но это не очень удобно, так как нет встроенных арифметических операций c. Я читал о std::valarray, но многие ссылки не рекомендуют его использовать, и что-то вроде std::vector не оптимально, так как размерность фиксирована.

Есть такой тип или я должен перестать быть ленивым и перегрузить std::array операторов?

Ответы [ 2 ]

2 голосов
/ 22 января 2020

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

Свернуть свою собственную не сложно, но вам нужно создать свой собственный класс он содержит std :: array или std :: vector, предоставляет методы пересылки, которые могут вам понадобиться (например, индекс массива), и математические перегрузки по мере необходимости. В идеале это должен быть шаблонный класс, такой как std :: array, так что вы можете указать измерение во время компиляции, как в настоящее время.

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

0 голосов
/ 22 января 2020

Если вы используете G CC, вы можете использовать SIMD-расширения G CC .

Пример - LIVE :

#include <iostream>
#include <x86intrin.h>

typedef double v4d __attribute__ ((__vector_size__ (sizeof(double)*4)));

int main(){
    v4d x{1,2,12};
    v4d y{3,4,2};
    auto z = 1.5+x*y;
    for(size_t i = 0; i < 3; ++i)
        std::cout << z[i] << std::endl;
    return 0;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...