C ++ Векторы Проблема - PullRequest
       17

C ++ Векторы Проблема

1 голос
/ 31 августа 2009

Ну, у меня, скорее всего, чрезвычайно глупая проблема, но я не мог ее решить, и я теряю надежду, что кто-то может помочь

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 для некоторых матричных вычислений. Я создаю несколько маленьких матриц из большой матрицы и помещаю их в вектор, называемый «образец», здесь. Первый цикл - это просто основанная на счетчике вещь, а вторая цикл для создания маленьких матриц после второго цикла, я помещаю их в вектор

Но проблема в том, что после этих циклов, когда я пытаюсь добраться до одной из матриц в векторе, я всегда получаю ту, которая была наконец помещена в вектор. Я использую эти методы для доступа к элементам вектора
Образец [0];
sample.at (шесть);
Для этих двух я получаю ту же матрицу, которая была добавлена ​​к вектору в конце. Что я делаю неправильно?

Ответы [ 2 ]

4 голосов
/ 31 августа 2009

Поскольку ваш sample вектор представляет собой список указателей , вам необходимо убедиться, что вы создаете новый экземпляр CvMat для каждого элемента, который вы добавляете в вектор. В противном случае кажется, что все ваши элементы указывают на одно и то же (g).

Если CvMat имеет конструктор копирования, вы можете исправить это, выполнив следующее:

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

Это создает вектор из CvMat объектов , а push_back(*g) делает копию матрицы и помещает ее в конец вектора.

0 голосов
/ 31 августа 2009
vector < CvMat*> sample;

- это вектор указателей на CvMat, и вы постоянно вставляете в него 'g'. Вам нужно создавать новые экземпляры CvMat и добавлять их в свой вектор, а не добавлять к нему 'g' каждый раз.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...