C++ 2D向量及其操作

3

如何在C++中创建一个2D向量并找到它的长度坐标

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

谢谢。


一个二维的向量?你是不是指的是矩阵 - Oliver Charlesworth
@Oli Charlesworth。这是同一个术语吗?就像我所说的“向量的向量”一样吗?谢谢。 - Simplicity
@user:向量的定义是一维的。矩阵的定义是二维的。 - Oliver Charlesworth
在这个上下文中,“坐标”是什么意思? - Jim Lewis
这开始看起来像是一个猜谜游戏... - user180326
3个回答

5
如果您的目标是进行矩阵计算,请使用Boost::uBLAS。该库具有许多线性代数函数,可能比手动构建的任何内容都要快得多。
如果您是一个受虐狂,并想坚持使用std::vector,则需要执行以下操作:
std::vector<std::vector<double> > matrix;
matrix.resize(10);
matrix[0].resize(20);
// etc

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[] 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
他希望得到物理学中的向量。
要么自己动手编写练习:
class Vector2d
{
  public:
    // basic math (length: pythagorean theorem, coordinates: you are storing those)
  private: float x,y;
};

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接