push_back矢量矢量到矢量

时间:2015-10-09 15:49:34

标签: c++ vector

如何创建矩阵向量(向量向量),其中矩阵的大小不同并初始化?

typedef std::vector<double> Vector;
typedef std::vector<std::vector<double>> Matrix;

Vector v;
std::unique_ptr<Matrix> m = std::make_unique<Matrix>();
(*m)[0][0] = 1.0; 
v.push_back(m);

编译错误:

vectors.cpp: In function 'int main()':
vectors.cpp:37:18: error: no matching function for call to 'std::vector<double>::push_back(std::uniq
ue_ptr<std::vector<std::vector<double> > >&)'
     v.push_back(m);
                  ^

2 个答案:

答案 0 :(得分:2)

您需要使用以下内容:

typedef std::vector<std::vector<double>> Matrix;
typedef std::vector<std::unique_ptr<Matrix>> MatrixVector;

std::unique_ptr<Matrix> m = std::make_unique<Matrix>();
MatrixVector mv;
mv.push_back(std::move(m));

答案 1 :(得分:0)

安排你的typedefs

typedef std::vector<std::vector<double>> Matrix;
typedef std::vector<std::shared_ptr<Matrix>> Vector;

请注意使用shared_ptr - 这样可以更轻松地将Matrix的所有权转移到Vector

然后:

Vector v;
std::shared_ptr<Matrix> m = std::make_shared<Matrix>();
// Add content to the matrix... 
v.push_back(m);