c ++:类实例的向量,按类成员值搜索失败

时间:2015-07-30 14:40:28

标签: c++ class vector

我有以下程序,我在其中定义了Point类的向量。我用他们的ID推入了这个向量五个Point实例。然后我尝试按Id搜索,但没有得到预期的结果。以下程序没有返回任何内容。

#include<iostream>
#include<vector>
using namespace std;

class Point {
private:
    int id;
public:
    Point(){}
    void setId(int k){ id=k; }
    int GetId() { return id; }
};

int main()
{
    vector<Point> datasets;
    for(int i=0; i< 5; ++i){
        Point temp;
        temp.setId(i);
        datasets.push_back(temp);
    }

    for(int i=0;i<5;i++){
        if (datasets[i].GetId() ==4){
            return i;
        }
    }
}

2 个答案:

答案 0 :(得分:1)

你的程序可能运行得很好,我认为你将returncout混合在一起实际打印到控制台,目前你没有打印任何东西而你只是将i返回给操作系统,因为您在main中使用了返回,使其成为状态代码。

要查看输出,请使用cout

#include<iostream>
#include<vector>
using namespace std;
class Point{
        private:
                int id;
        public:
                Point(){}
                void setId(int k){id=k;}
                int GetId(){return id;}
};


int main()
{
        vector<Point> datasets;
        for(int i=0; i< 5; ++i){
        Point temp;
        temp.setId(i);
        datasets.push_back(temp);
        }
        for(int i=0;i<5;i++){
                if (datasets[i].GetId() ==4){
                        cout << "i is : " << i << endl;
                        break;
                }
        }
}

编辑以回答OP的评论:

使用:vector<Point> datasets(5);

答案 1 :(得分:1)

你不打印任何东西,因为你在for循环之后放回了

确定你不会得到任何结果

#include<iostream>
#include<vector>
using namespace std;
class Point{
        private:
                int id;
        public:
                Point(){}
                void setId(int k){id=k;}
                int GetId(){return id;}
};



 int main()
    {
            vector<Point> datasets;
            for(int i=0; i< 5; ++i){
            Point temp;
            temp.setId(i);
            datasets.push_back(temp);
            }
            for(int i=0;i<5;i++){
                    if (datasets[i].GetId() ==4){
                            cout<<i<<endl;
                    }
            }
 system("pause");
 return 0;
}

您可以使用:datasets.insert(datasets.begin()+i,temp);

而不是datasets.push_back(temp);

为在矢量类

中的索引i处添加元素提供更大的灵活性