我无法在c ++中创建正确的std :: vector

时间:2015-01-05 13:22:24

标签: c++ vector

我必须创建一个对象列表,所以为了保持它尽可能平滑,我想使用std :: vector而不是常规的对象数组。但是,我并不完全知道如何正确使用它们。以下是我班级的示例代码,我尝试将对象添加到vecor,然后使用第二种方法显示它们。

private:
vector <Student> stud;
public:
void Student::dodaj(){
stud.push_back(Student(getNaz(), getImie(), getLeg(), getRok()));
}

void Student::wypisz(){
cout << "Lista osob:\n";
for (int i = 0; i < 1; i++)
{
    cout << endl;
    cout << "Nazwisko: " << stud[i].nazwisko << endl;
    cout << "Imie: " << stud[i].imie << endl;
    cout << "Numer indeksu.: " << stud[i].legitymacja << endl;
    cout << "Rok studiow: " << stud[i].rok << endl;
}

我的主要人物:

Student st("Kowalski", "Jan", 123455, 2);
Student test1("Nowak", "Jan", 123, 2);
st.dodaj();
test1.dodaj();
test1.wypisz();

然而输出结果只是一个对象,我使用wypisz(打印/显示)方法,在这种情况下test1,而不是其中两个显示 - st和test1。任何想法如何解决?

1 个答案:

答案 0 :(得分:1)

stud似乎是Student的成员,这意味着每个Student对象都包含自己的向量。当您针对特定学生致电dodaj时,它会将自己的详细信息添加到其中包含的矢量中。

st.dodaj(); // Adds details of st to st's own vector
test1.dodaj(); // Adds details of test1 to test1's own vector

// Now we have one vector inside st containing a single element
// and one vector inside test1 containing a single element    

test1.wypisz(); // Prints elements from test1's vector

相反,你的矢量应该在你的Student类之外(或者至少是静态的)。一种选择是这样做:

Student st("Kowalski", "Jan", 123455, 2);
Student test1("Nowak", "Jan", 123, 2);

std::vector<Student> stud;
std.push_back(st);
std.push_back(test1);

您可能想要另一个包含此向量的类(可能是School?)。