C ++向量问题

时间:2009-08-30 23:24:56

标签: c++ stl vector

好吧,我很可能是一个极端愚蠢的问题,但无法弄清楚,我即将失去理智希望有人可以提供帮助

vector<CvMat*> sample;
for(int x = 0; x < 29; x += 2)
{
    for(int b = 0; b < 22; b += 2)
    {
      cvmSet(g, 0, b, cvmGet(NormalVector, 0, x + b));
      cvmSet(g, 0, b + 1, cvmGet(NormalVector, 0, x + b + 1));
    }
    sample.push_back(g);
}

我正在使用OpenCv进行一些矩阵计算basiacllay我正在做的是我从一个大矩阵创建一些小矩阵并将它们放入一个名为“sample”的Vector中。第一个循环只是一个基于计数器的东西和第二个循环用于在第二个循环后创建小矩阵,我将它们放入向量

但问题出现在这些循环之后,当我试图到达向量中的一个矩阵时,我总是得到最后放入向量的那个。 我使用这些方法来访问向量元素
样品[0];
sample.at(6);
对于这两个,我得到了最后添加到向量中的相同矩阵。我做错了什么?

2 个答案:

答案 0 :(得分:4)

由于您的sample向量是指针的列表,因此您需要确保为添加到指针的每个元素创建CvMat的新实例。向量。否则,听起来你的所有元素都指向同一个东西(g)。

如果CvMat有复制构造函数,您可以通过执行以下操作来修复它:

vector <CvMat> sample;
for(int x =0 ; x<29; x+=2) {
    // ...
    sample.push_back(*g);
}

这会创建CvMat 对象的向量,push_back(*g)会复制矩阵并将其推送到向量的背面。

答案 1 :(得分:0)

vector < CvMat*> sample;

是指向CvMat的指针向量,您不断地将“g”推入其中。您需要创建CvMat的新实例并将其添加到向量中,而不是每次都向其添加“g”。