Función push_back de 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 (como
10,"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 contenedor
size()(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 <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:
#include <vector>es el requisito previo para usarvectorel contenedor.std::vector<int> numbers;Se creó un vectornumbersvacíovector, que en el futuro almacenaráintenteros de tipo- Tres
push_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. 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 <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 <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).
Otras extensiones