C ++ 2D вектор и операции - PullRequest
       33

C ++ 2D вектор и операции

3 голосов
/ 30 января 2011

Как можно создать 2D vector в C ++ и найти его length и coordinates?

В этом случае, как векторные элементы заполняются значениями?

Спасибо.

Ответы [ 3 ]

5 голосов
/ 30 января 2011

Если ваша цель - сделать матричные вычисления, используйте Boost :: uBLAS .Эта библиотека имеет много функций линейной алгебры и, вероятно, будет намного быстрее, чем все, что вы строите вручную.

Если вы мазохист и хотите придерживаться std::vector, вам нужно сделать что-то вродеследующее:

std::vector<std::vector<double> > matrix;
matrix.resize(10);
matrix[0].resize(20);
// etc
3 голосов
/ 30 января 2011

У вас есть несколько вариантов. Самым простым является примитивный 2-мерный массив:

int *mat = new int[width * height];

Чтобы заполнить его определенным значением, вы можете использовать std::fill():

std::fill(mat, mat + width * height, 42);

Чтобы заполнить его произвольными значениями, используйте std::generate() или std::generate_n():

int fn() { return std::rand(); }

// ...
std::generate(mat, mat + width * height, fn);

Вам нужно будет запомнить delete массив, когда вы закончите его использовать:

delete[] mat;

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

struct matrix {
    matrix(int w, int h);
    matrix(const matrix& m);
    matrix& operator=(const matrix& m);
    void swap(const matrix& m);
    ~matrix();
};

// ...
matrix mat(width, height);

Но, конечно, кто-то уже сделал работу за вас. Взгляните на boost::multi_array.

1 голос
/ 06 ноября 2014

(S) Он хочет векторы как в физике.

или бросьте свое собственное упражнение:

class Vector2d
{
  public:
    // basic math (length: pythagorean theorem, coordinates: you are storing those)
  private: float x,y;
};

или используйте такие библиотеки, как Eigen, для которых определен Vector2f

...