C ++ 2D矢量和操作

时间:2011-01-30 18:58:59

标签: c++ vector n-dimensional

如何在C ++中创建2D vector并找到其lengthcoordinates

在这种情况下,向量元素如何填充值?

感谢。

3 个答案:

答案 0 :(得分:5)

如果您的目标是进行矩阵计算,请使用Boost::uBLAS。这个库有许多线性代数函数,可能比你手工构建的任何函数都要快得多。

如果你是受虐狂并想坚持使用std::vector,你需要做以下事情:

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

答案 1 :(得分:3)

您有很多选择。最简单的是原始的二维数组:

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

答案 2 :(得分:1)

(S)他想要物理学中的矢量。

要么将自己作为练习滚动:

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

或使用像Eigen这样定义了Vector2f的库