Utilizando empty() en c++

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.

Temario

¿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)).

c++ que libreria usa empty - Qué es empty en C++

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.

Subir