2013-08-13 3 views
-1

У меня есть класс следующим образом:Итерации по вектору

class Descriptor 
{ 

public: 

float xi, yi;  
vector<double> fv;   
Descriptor() 
{ 
} 

Descriptor(float x, float y, vector<double> const& f) 
{ 
    xi = x; 
    yi = y; 
    fv = f; 
} 
}; 

также у меня есть вектор дескриптора вроде этого: vector<Descriptor> keypoint;

Теперь я хочу, чтобы напечатать элементы характерной точки, используя итераторы с учетом Ф.В. является вектором двойного.

Я написал этот код

vector<Descriptor>::iterator it; 

for(it=keypoint.begin();it!=keypoint.end();it++){ 
    cout<<it->xi <<"---"<<it->yi<<endl; 
    double* f = it->fv.data(); 
    for(int i=0; i<it->fv.size();i++){ 
     cout<<*f<<endl; 
     f++; 
    } 
} 

но если я, например, х = 3 и уг = 4 и бс = [5 6 7] он печатает бс три раза, как это: 3 4 5 6 7 5 6 7 5 6 7 , пожалуйста, помогите мне, как исправить ...

+1

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

+1

Код, который вы опубликовали, хотя и немного странный в использовании арифметики указателя, должен работать как ожидалось ([демонстрация] (http://ideone.com/fpjxVp)). Предположительно, вектор не содержит того, что, по вашему мнению, он делает. Не могли бы вы опубликовать какой-нибудь код (желательно, небольшую, полную программу), чтобы показать, как вы заполняете вектор до получения этого вывода? –

+0

Ваш код выглядит правильно, я бы предпочел 'for (int i = 0; i fv.size(); i ++) {cout < fv [i] ...' вместо вашего указателя на double. – alexbuisson

ответ

0

Ваш код выглядит правильно, есть ли у вас какой-либо тестовый код, который демонстрирует проблему? И почему вы используете f? Это не похоже на цикл, который вы используете в любом случае. Я бы рекомендовал использовать

vector<Descriptor>::iterator it; 

for(it = keypoint.begin(); it != keypoint.end(); it++){ 
    cout << it->xi << "---" << it->yi <<endl; 
    for(int i = 0; i < it->fv.size(); i++){ 
     cout << it->fv[i] << endl; 
    } 
} 
+0

Я также применяю ваш код, но я получил тот же результат: 3 --- 4 5 6 7 5 6 7 5 6 7 – user2671120

+0

Тогда я бы порекомендовал размещать именно то, что ваш вход, тогда кто-то может воссоздать сценарий и, возможно, рассказать вам, что не так – sedavidw

+0

Дорогой sedavidw, пожалуйста, пришлите мне свой адрес электронной почты, чтобы отправить вам мой код. – user2671120

Смежные вопросы