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

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

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

Благодарю.

3 ответа

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

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

std::vector<std::vector<double> > matrix;
matrix.resize(10);
matrix[0].resize(20);
// etc

У вас есть несколько вариантов. Самым простым является примитивный 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,

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

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

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

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

Другие вопросы по тегам