【问题标题】:C++ 2D vector and operationsC++ 2D 向量和运算
【发布时间】:2011-01-30 18:58:58
【问题描述】:

如何在 C++ 中创建一个2D vector 并找到它的lengthcoordinates

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

谢谢。

【问题讨论】:

  • 2D 矢量?你是说矩阵吗?
  • @Oli Charlesworth。是同一个词吗?是不是像Vector of vectors(我的意思是)?谢谢
  • @user:根据定义,向量是一维的。根据定义,矩阵是二维的。
  • 这里的“坐标”是什么意思?
  • 这开始看起来像猜谜游戏了......

标签: c++ vector n-dimensional


【解决方案1】:

如果您的目标是进行矩阵计算,请使用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

    【讨论】:

      【解决方案3】:

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

      要么自己动手做练习:

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

      或使用定义了 Vector2f 的 Eigen 等库

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-09-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-11-10
        • 2012-09-29
        • 1970-01-01
        • 2020-03-09
        相关资源
        最近更新 更多