C++ 向量问题

Posted

技术标签:

【中文标题】C++ 向量问题【英文标题】:C++ Vectors Problem 【发布时间】:2009-08-30 23:24:56 【问题描述】:

好吧,我很可能有一个非常愚蠢的问题,但无法解决,我快要失去理智了,希望有人能提供帮助

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 我正在做的是我从一个大矩阵创建一些小矩阵并将它们放入一个称为“样本”的向量中。第一个循环只是一个基于计数器的东西,第二个循环在第二个循环之后创建小矩阵的循环我将它们放入向量中

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

【问题讨论】:

【参考方案1】:

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

如果CvMat 有一个复制构造函数,您可以通过这样做来修复它:

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

这会创建一个包含CvMat对象的向量,push_back(*g) 会复制矩阵并将其推到向量的后面。

【讨论】:

【参考方案2】:
vector < CvMat*> sample;

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

【讨论】:

以上是关于C++ 向量问题的主要内容,如果未能解决你的问题,请参考以下文章

C++中向量的向量顺序

向量c++的向量大小

C++ 按列对二维向量进行排序

(向量对)与(向量对)C++的速度[关闭]

C++ 将元素从一个向量移动到另一个向量

为啥我不能将整数向量推入 C++ 中的二维整数向量?