Как создать 2D vector
на C++ и найти его length
и coordinates
?C++ 2D вектор и операции
В этом случае, как векторные элементы заполняются значениями?
Спасибо.
Как создать 2D vector
на C++ и найти его length
и coordinates
?C++ 2D вектор и операции
В этом случае, как векторные элементы заполняются значениями?
Спасибо.
Если ваша цель - выполнять вычисления в матрице, используйте 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[] 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;
};
или использовать библиотеки, такие как Эйген, которые имеют Vector2f определены
2D-* вектор *? Вы имеете в виду * matrix *? –
@ Oli Charlesworth. Это тот же термин? Это как «вектор векторов» (что я имею в виду)? Спасибо – Simplicity
@user: Вектор, по определению, 1D. Матрица, по определению, является 2D. –