Iniciar Vector de Estructuras en C++

Jinku Hu 12 octubre 2023
  1. Usar el Constructor de Listas de Inicialización para inicializar un Vector de Estructuras en C++
  2. Use Range Constructor para inicializar un vector de struct en C++
  3. Usar el Constructor Personalizado para inicializar un Vector de Estructuras en C++
Iniciar Vector de Estructuras en C++

Este artículo demostrará múltiples métodos de cómo inicializar un vector de estructuras en C++.

Usar el Constructor de Listas de Inicialización para inicializar un Vector de Estructuras en C++

Una lista de inicialización es una forma común de inicializar los contenedores con valores constantes. Este método es más adecuado para las estructuras de datos que necesitan tener un estado inicial de algún tipo. En el siguiente ejemplo, dado que el vector contiene estructuras Person definidas, los elementos de la lista de inicialización deben agruparse dentro de corchetes y separarse con dos puntos. Observe que los elementos de de struct se acceden usando la notación struct.element y se envían a la consola.

#include <iostream>
#include <string>
#include <vector>

using std::cout;
using std::endl;
using std::string;
using std::vector;

struct Person {
  string name;
  string surname;
  int age;
};

int main() {
  vector<Person> parr1 = {{"John", "Cooper", 32},
                          {"Theo", "Parrot", 23},
                          {"Aun", "Chao", 43},
                          {"Vivien", "Bardot", 67}};

  for (const auto &arr : parr1) {
    cout << "Name: " << arr.name << endl
         << "Surname: " << arr.surname << endl
         << "Age: " << arr.age << endl;
  }

  return EXIT_SUCCESS;
}

Resultado:

Name: John
Surname: Cooper
Age: 32
Name: Theo
Surname: Parrot
Age: 23
Name: Aun
Surname: Chao
Age: 43
Name: Vivien
Surname: Bardot
Age: 67

Use Range Constructor para inicializar un vector de struct en C++

Alternativamente, el constructor de rango puede ser utilizado para inicializar el vector de las estructuras. Este método es útil cuando se necesita crear otra copia del objeto vector existente. Como se muestra en el siguiente ejemplo de código, declaramos un vector parr3 de la estructura Person e iniciamos con el contenido del vector parr1 del mismo tipo.

#include <iostream>
#include <string>
#include <vector>

using std::cout;
using std::endl;
using std::string;
using std::vector;

struct Person {
  string name;
  string surname;
  int age;
};

int main() {
  vector<Person> parr1 = {
    {"John", "Cooper", 32}, {"Theo", "Parrot", 23}, {"Kim", "Colbert", 53},
    {"Aun", "Chao", 43},

    vector<Person> parr3(parr1.begin(), parr1.end());

  for (const auto &arr : parr3) {
    cout << "Name: " << arr.name << endl
         << "Surname: " << arr.surname << endl
         << "Age: " << arr.age << endl;
  }

  return EXIT_SUCCESS;
}

Resultado:

Name: John
Surname: Cooper
Age: 32
Name: Theo
Surname: Parrot
Age: 23
Name: Kim
Surname: Colbert
Age: 53
Name: Aun
Surname: Chao
Age: 43

Usar el Constructor Personalizado para inicializar un Vector de Estructuras en C++

Otra solución es un constructor específico de vector, que proporciona una característica para inicializar un vector con un número dado de los mismos valores. En este caso, proporcionamos al constructor un único elemento de tipo estructura Person y un número arbitrario 3 para inicializar el objeto.

#include <iostream>
#include <string>
#include <vector>

using std::cout;
using std::endl;
using std::string;
using std::vector;

struct Person {
  string name;
  string surname;
  int age;
};

constexpr int NUM = 3;

int main() {
  vector<Person> parr4(NUM, {"John", "Cooper", 32});

  for (const auto &arr : parr4) {
    cout << "Name: " << arr.name << endl
         << "Surname: " << arr.surname << endl
         << "Age: " << arr.age << endl;
  }

  return EXIT_SUCCESS;
}

Resultado:

Name: John
Surname: Cooper
Age: 32
Name: John
Surname: Cooper
Age: 32
Name: John
Surname: Cooper
Age: 32
Autor: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.

LinkedIn Facebook

Artículo relacionado - C++ Vector