09/03/2019
En C++, la función empty()es una herramienta esencial para determinar si un contenedor, como un vector, una lista, una pila o una cola, está vacío o no. Esta función proporciona una forma eficiente y segura de verificar el estado de un contenedor antes de realizar operaciones que podrían provocar errores si el contenedor está vacío, como acceder a elementos que no existen.

¿Qué es empty() en C++?
La función empty()es un método miembro de diversas clases de contenedores de la STL (Standard Template Library) de C++. Esta función no requiere ningún argumento y devuelve un valor booleano ( trueo false):
- true : Si el contenedor está vacío (no contiene elementos).
- false : Si el contenedor contiene al menos un elemento.
Su uso previene errores comunes, como intentar acceder al primer elemento de un contenedor vacío, lo que resultaría en un comportamiento indefinido o una excepción.
Librerías que usan empty()
La función empty()está disponible en varias de las librerías estándar de C++. Algunas de las más comunes incluyen:
- : Para vectores.
- : Para listas doblemente enlazadas.
- : Para colas de doble extremo.
- : Para pilas.
- : Para colas.
- : Para mapas.
- : Para conjuntos.
Para usar empty(), debes incluir el encabezado correspondiente a la librería que contiene el tipo de contenedor que estás utilizando. Por ejemplo:
#include <vector> // Para vectores#include <list> // Para listas// ...otros includes...Cómo usar empty()
La sintaxis para usar empty()es sencilla. Suponiendo que ' miContenedor' es un objeto de un contenedor de la STL, la llamada a la función sería:
miContenedor.empty();Esta expresión devuelve truesi miContenedorestá vacío, y falseen caso contrario.
Un ejemplo con vectores:
#include <iostream>#include <vector>int main() { std::vector<int> numeros; if (numeros.empty()) { std::cout << "El vector está vacío." << std::endl; } else { std::cout << "El vector contiene elementos." << std::endl; } numeros.push_back(10); numeros.push_back(20); if (numeros.empty()) { std::cout << "El vector está vacío." << std::endl; } else { std::cout << "El vector contiene elementos." << std::endl; } return 0;}Este código primero crea un vector vacío y luego verifica si está vacío usando empty(). Después, agrega elementos al vector y verifica nuevamente. La salida mostrará:
El vector está vacío.El vector contiene elementos.Comparación con otros métodos para verificar vacíos
Si bien empty()es la forma más limpia y recomendada para verificar si un contenedor está vacío, existen otras alternativas, aunque menos eficientes o menos seguras:
- Comprobar el tamaño: Puedes usar el método
size()para obtener el número de elementos en el contenedor y comparar con 0. Sin embargo, empty() suele ser más eficiente porque algunas implementaciones de contenedores pueden optimizar la comprobación de vacío. - Iteradores: Puedes usar iteradores para recorrer el contenedor y comprobar si el iterador al principio es igual al iterador al final. Este método es menos eficiente que empty() .
Se recomienda usar empty()para la comprobación de vacíos en contenedores STL debido a su eficiencia, legibilidad y seguridad.
Ejemplos de uso en diferentes contenedores
Vectores
#include <vector>#include <iostream>int main() { std::vector<int> miVector; if (miVector.empty()) std::cout << "El vector está vacío"; return 0;}Listas
#include <list>#include <iostream>int main() { std::list<std::string> miLista; if (miLista.empty()) std::cout << "La lista está vacía"; return 0;}Pilas
#include <stack>#include <iostream>int main() { std::stack<double> miPila; if (miPila.empty()) std::cout << "La pila está vacía"; return 0;}Colas
#include <queue>#include <iostream>int main() { std::queue<char> miCola; if (miCola.empty()) std::cout << "La cola está vacía"; return 0;}Tabla comparativa de contenedores y uso de empty()
| Contenedor | Encabezado | Uso de empty() |
|---|---|---|
std::vector | <vector> | miVector.empty() |
std::list | <list> | miLista.empty() |
std::deque | <deque> | miDeque.empty() |
std::stack | <stack> | miPila.empty() |
std::queue | <queue> | miCola.empty() |
std::map | <map> | miMapa.empty() |
std::set | <set> | miConjunto.empty() |
Recuerda siempre incluir el encabezado correcto para cada contenedor que uses.
Consultas habituales sobre empty()
P: ¿Puedo usar empty() con arrays C-style?
R: No, empty()es un método de las clases de contenedores de la STL. Los arrays C-style no son objetos de clase y no tienen este método. Para verificar si un array C-style está vacío, necesitas rastrear su tamaño de forma manual.
P: ¿Es empty() eficiente?
R: Sí, empty()está generalmente optimizado para ser muy eficiente. En muchos casos, su tiempo de ejecución es constante (O(1)).

P: ¿Qué sucede si llamo a top() o front() en un contenedor vacío después de comprobar que no lo está con empty() ?
R: Si bien empty()evita acceder a un elemento inexistente directamente, aún debes proteger tu código de posibles errores. Si modificas el contenido del contenedor entre la verificación y el acceso al elemento, podría estar vacío, provocando una excepción o un comportamiento indefinido.
P: ¿Hay alguna diferencia en el rendimiento entre usar size() == 0 y empty() ?
R: En la mayoría de los casos, no habrá una diferencia notable en el rendimiento. Sin embargo, empty()está diseñado específicamente para verificar el vacío, y algunos implementadores pueden optimizarlo mejor que una comparación con size(). Por lo tanto, empty()es la opción recomendada por su claridad y potencial optimización.
La función empty() es una herramienta indispensable en C++ para la manipulación segura y eficiente de contenedores. Su uso previene errores comunes y promueve un código más robusto y legible.
Si quieres conocer otros artículos parecidos a Utilizando empty() en c++ puedes visitar la categoría Libros y Librerías.
