# How does it work to use a vector of type struct? (C ++)

4

I would like help with understanding how to declare a vector of type struct. In the example of the code below I create the struct configcarros and would like to create a vector of the type of this structure and later access num_car and tempodevolta inserting values inside the vector.

``````    struct configcarros{

int num_car, tempodevolta;

};

int main(){

int C,V, tempo;
struct configcarros cars_ORD;
cin >> C >> V;
vector<struct configcarros> cars(C);

}
``````

Could anyone help me understand this? I'm not finding much searching for struct vectors.

asked by anonymous 28.10.2017 / 03:06

4

I start by saying that, as @RicardoPontual indicated in the comments, C ++ does not need to include the word `struct` in the use of the structure. In addition, since% w / o% of something with dynamic size can cut the startup it has, and simplify the declaration by leaving only:

``````vector<configcarros> cars;
``````

## Insert structures in `<vector>`

To insert structures into the vector, you can create the structure itself, set its values, and add through the `<vector>` :

``````configcarros c1; //criar objeto da estrutura
c1.num_car = 1; //definir o valor para num_car
c1.tempodevolta = 30; //definir o valor para tempodevolta

``````

You can even use a more direct boot by doing:

``````configcarros c2{2, 35}; //inicializar logo com os 2 valores
cars.push_back(c2);
``````

Or do everything inline :

``````cars.push_back(configcarros{5,15});
``````

## Read structures stored in `push_back`

The reading is done as if it were a normal array using `<vector>` and `[` , placing the position you want to access in the middle. So to access the `]` field of the first vector position, the `num_car` position would do:

``````cars[0].num_car
``````

To show the two values of the first car in the console you can do:

``````cout<<cars[0].num_car<<" "<<cars[0].tempodevolta;
``````

When you need to go through all you should use a loop / cycle, in which `0` is usually the most appropriate. There are many different ways of doing this `for` but I will illustrate the most simple and classic:

``````for (int i = 0; i < cars.size(); i++){
cout<<cars[i].num_car<<" "<<cars[i].tempodevolta<<endl;
}
``````

It is important to note that `for` is based on vector size, calling the `for` of it. In order to keep everything in line on the screen, I added a `size` at the end of `endl`

Documentation

28.10.2017 / 11:14