зацикливание векторов с объектами

#c #loops #vector

#c #циклы #вектор

Вопрос:

итак, что я пытаюсь сделать, это создать несколько объектов с помощью vector. Теперь моя программа работает нормально, если я не использую vector и если у меня есть только один объект. итак, как я могу, чтобы мой класс boxofproduceимел более одного объекта, использующего векторы. я попробовал то, что вы видите перед собой, и это работает, но затем программа выходит из строя и сообщает, что не отвечает. я знаю, что должен где-то использовать push back, но понятия не имею, где. я опубликовал только основную функцию, поэтому вам не нужно видеть всю программу целиком, потому что она слишком большая.

 int main()
{
    int x;
    int size;


    vector<BoxOfProduce>box;
    cout<<"How many boxes you want";
    cin>>size;

    for ( x = 0; x < size; x  )
    {
        box[x].setItemAry();
        box[x].randomPick();


        box[x].display();
        box[x].change();
        box[x].display2();
    }

    //BoxOfProduce box;


    //box.setItemAry();
    //box.randomPick();


    //box.display();
    //box.change();
    //box.display2();



    getchar();getchar();
    return 0;

}
  

Комментарии:

1. Вы уверены, что вам нужно использовать вектор? Если количество элементов никогда не меняется после ввода пользователем размера, было бы проще сказать boxofproducebox[] = new BoxOfProduce[size];

2. @AustinMullins Это именно та ситуация, когда следует использовать вектор. Было бы вообще бессмысленно использовать динамически выделяемый массив. Преимуществ нет, но есть риск или утечка ресурсов.

Ответ №1:

Вы получаете доступ к объектам в векторе, не создавая их. Ваш код должен быть таким:

 for ( x = 0; x < size; x  )
{
    BoxOfProduce obj; //create an object
    obj.setItemAry();
    obj.randomPick();
    //.. set other properties
    box.push_back(obj); //insert it into the vector
}
  

vector<BoxOfProduce>box; просто создаст вектор, но он не содержит никакого BoxOfProduce объекта. Поэтому, когда вы пытаетесь получить доступ к объектам, программа вылетает.

Ответ №2:

Вам нужно создать свой объект и поместить их в вектор:

 vector<BoxOfProduce> boxes;
for (int i = 0; i < 10; i  )
{
    BoxOfProduce box;

    box.setItemAry();
    box.randomPick();

    box.display();
    box.change();
    box.display2();

    boxes.push_back(box); // Put a box into your vector 
}
  

Ответ №3:

Вы также можете сделать так,

 vector<BoxOfProduce>box;
cout<<"How many boxes you want";
cin>>size;
for ( x = 0; x < size; x  )
{
    BoxOfProduce obj; //create an object
    box.push_back(obj); //insert it into the vector
}

for ( x = 0; x < size; x  )
{
    box[x].setItemAry();
    box[x].randomPick();


    box[x].display();
    box[x].change();
    box[x].display2();
}
  

Комментарии:

1. kk итак, ваш работает и все, но теперь, когда я пытаюсь ввести тип vegi в свою программу, он появляется дважды.

2. неважно, я все равно получил thnx, это была просто проблема cin.ignore()