Función push_back de C++ <vector>

C++ 容器类 <vector>Clase de contenedor C++ <vector>


Entre los numerosos contenedores,vector(vector) es el más común y el que más se parece a un arreglo capaz de crecer automáticamente, ypush_backes la función clave que hace crecer este arreglo.

push_backes una función miembro utilizada parael arreglo dinámico (vector)ootros contenedores secuenciales (comolist, deque)definalagregar un nuevo elemento.

push_backimplementa elcrecimiento dinámico del contenedor, no necesitas especificar de antemano el tamaño final del contenedor; puedes agregar elementos en cualquier momento según las necesidades del programa en tiempo de ejecución.

Definición de la palabra: pushes "empujar",backes "atrás"; juntos significan "empujar hacia atrás", muy descriptivo.


Sintaxis básica y parámetros

push_backes una función miembro de la clase de contenedor, por lo que primero necesitas tener un objeto contenedor y, mediante el operador de punto.para llamarlo.

Formato de sintaxis

void push_back(const T& value);
void push_back(T&& value);  // C++11 之后(支持右值)

Descripción de parámetros

  • Parámetro: value
    • Tipo: debe coincidir con el tipo de elemento especificado al definir el contenedor, o ser un valor convertible a ese tipo.
    • Descripción: el valor que deseas agregar al final del contenedor. Puede ser una variable, un literal (como10, "hello"), o el resultado de una expresión.

Descripción de la función

  • Valor de retorno: void(sin valor de retorno). Su función es únicamente "agregar un elemento"; una vez agregado, la función termina.
  • Efectodel contenedorsize()(número actual de elementos) aumenta en 1. El nuevo elemento se convierte en el último elemento del contenedor.

Ejemplo

Mediante una serie de ejemplos, de simples a complejos, dominemos por completopush_backel uso de

Ejemplo 1: Uso básico: gestión de enteros

Ejemplo

#include <iostream>
#include <vector> // 1. Debes incluir el archivo de cabecera vector

int main() {
    // 2. Crea un vector vacío para almacenar enteros
    std::vector<int> numbers;

    std::cout << "El tamaño del vector al inicio es: " << numbers.size() << std::endl;

    // 3. Usa push_back para agregar elementos
    numbers.push_back(10); // Agrega el entero 10 al final
    numbers.push_back(20); // Agrega 20 después de 10
    numbers.push_back(30); // Agrega 30 después de 20

    std::cout << "El tamaño del vector después de agregar es: " << numbers.size() << std::endl;

    // 4. Recorre e imprime todos los elementos para verificar el orden de inserción
    std::cout << "Los elementos del vector son: ";
    for(int i = 0; i < numbers.size(); ++i) {
        std::cout << numbers[i] << " "; // Se accede mediante índice como en un arreglo
    }
    std::cout << std::endl;

    return 0;
}

Resultado esperado de la ejecución:

初始时,vector的大小是: 0
添加后,vector的大小是: 3
vector中的元素是: 10 20 30

Análisis del código:

  1. #include <vector>es el requisito previo para usarvectorel contenedor.
  2. std::vector<int> numbers;Se creó un vectornumbersvacíovector, que en el futuro almacenaráintenteros de tipo
  3. Trespush_backllamadas a push_back agregan, en orden,10, 20, 30al finalnumbersdel vector. El orden de inserción es el orden de los elementos envectorel vector.
  4. numbers.size()Devuelve el número actual de elementos.numbers[i]Accede a los elementos mediante un índice, igual que en los arreglos.

Ejemplo 2: Gestión de cadenas (strings)

vectorNo solo puede almacenar números, sino también cadenas, tipos personalizados y cualquier otro tipo de datos.

Ejemplo

#include <iostream>
#include <vector>
#include <string> // Usar string también requiere incluir el archivo de cabecera

int main() {
    // Crea un vector que almacena std::string
    std::vector<std::string> tasks;

    // Usa push_back para agregar tareas pendientes
    tasks.push_back("Aprender C++ push_back");
    tasks.push_back("Hacer la tarea");
    tasks.push_back("Leer documentación técnica");

    std::cout << "Tareas pendientes de hoy ( << tasks.size() << " elementos):\n";
    // Usa el bucle for basado en rango (C++11) para recorrer, es más conciso
    for(const auto& task : tasks) {
        std::cout << "- " << task << std::endl;
    }

    return 0;
}

Resultado esperado de la ejecución:

今日待办事项 (3 项):
- 学习 C++ push_back
- 写作业
- 阅读技术文档

Análisis del código:

  • std::vector<std::string>Se declaró el tipo de elemento comostd::stringdel contenedor.
  • push_backEl parámetro de push_back ahora es un literal de cadena (que se convertirá automáticamente astd::string)。
  • for(const auto& task : tasks)es el bucle for basado en rango introducido en C++11, que recorre automáticamentetaskscada elemento, muy conveniente.autoDeja que el compilador deduzca automáticamentetaskel tipo.

Ejemplo 3: Construcción dinámica del contenido del contenedor

Esta espush_backsu mayor ventaja: construir el contenedor según los datos en tiempo de ejecución (como la entrada del usuario, la lectura de archivos).

Ejemplo

#include <iostream>
#include <vector>

int main() {
    std::vector<int> scores;
    int inputScore;
    char continueFlag = 'y';

    std::cout << "Ingrese las calificaciones del estudiante (ingrese un valor no numérico para finalizar):\n";
    // Método 1: El bucle se decide según la entrada del usuario
    while(std::cin >> inputScore) {
        scores.push_back(inputScore);
    }

    // Limpia el estado de error de cin para posibles entradas posteriores
    std::cin.clear();
    std::cin.ignore(10000, '\n');

    // Método 2: Preguntar si continuar
    /*
    while(continueFlag == 'y' || continueFlag == 'Y') {
std::cout << "Ingrese una calificación: ";
        std::cin >> inputScore;
        scores.push_back(inputScore);

std::cout << "¿Continuar ingresando? (y/n): ";
        std::cin >> continueFlag;
    }
    */


    std::cout << "\n"Se ingresaron un total de " << scores.size() << " calificaciones.\n";
    if(!scores.empty()) { // Comprueba si el contenedor está vacío
        int sum = 0;
        for(int score : scores) {
            sum += score;
        }
        std::cout << "El promedio es: " << static_cast<double>(sum) / scores.size() << std::endl;
    }

    return 0;
}

Este ejemplo muestra cómo usarpush_backpara llenar dinámicamente el contenedor en un bucle y finalmente calcular el promedio. Puedes intentar ejecutarlo e ingresar100 90 85 a(al final ingresa una letraapara terminar el bucle de entrada de números).


C++ 容器类 <vector>Clase de contenedor C++ <vector>

Otras extensiones