2011-01-30 5 views
3

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

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

Спасибо.

+0

2D-* вектор *? Вы имеете в виду * matrix *? –

+0

@ Oli Charlesworth. Это тот же термин? Это как «вектор векторов» (что я имею в виду)? Спасибо – Simplicity

+0

@user: Вектор, по определению, 1D. Матрица, по определению, является 2D. –

ответ

5

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

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

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

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

1

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

либо свернуть свой собственный в качестве упражнения:

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

или использовать библиотеки, такие как Эйген, которые имеют Vector2f определены