遍历向量

Iterate through a vector

本文关键字:向量 遍历      更新时间:2023-10-16

我有一个类如下:

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;

现在我想使用迭代器打印关键点的元素,因为fv是一个双向量。

我写了这个代码

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++;
    }
}

但如果我有例如xi=3和yi=4和fv=[5 6 7]它像这样打印fv三次:3 4 5 6 7 5 6 7 6 5 6 7请帮我纠正它…

您的代码看起来是正确的,您有任何测试代码来证明这个问题吗?为什么要使用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;
    }
}