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