Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Improved spanish List docs #31432

Merged
merged 2 commits into from
Aug 20, 2019
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
68 changes: 65 additions & 3 deletions guide/spanish/cplusplus/lists/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,72 @@ localeTitle: Listas de C ++
---
# ¿Qué es una lista de STL?

Las listas en C ++ son una herramienta poderosa similar a su primo más conocido, C ++ Vectors. Mientras que los vectores son un contenedor secuencial. donde los elementos se indexan en una cadena continua, las listas también son un contenedor secuencial, pero se organizan de manera diferente. Los elementos de la lista apuntan a su siguiente elemento, por lo que todos los elementos están ordenados en secuencia, pero no utilizan la indexación. ¿Cómo? Tu puedes preguntar. Lo hacen no mediante la indexación sino mediante una herramienta especial llamada iteradores. Los iteradores son como punteros especiales. cuyo trabajo es mantener el orden de los elementos de la lista como el enlace entre dos vagones de tren. Aquí hay una buena visual de cómo se organizan las listas en comparación con los vectores y matrices. ![img](https://cdn-media-1.freecodecamp.org/imgr/SiU8uTe.png)
Las listas o listas encadenadas en C ++ son una herramienta poderosa similar a su primo más conocido, C ++ Vectors. Mientras que los vectores son un contenedor secuencial donde los elementos se indexan en una cadena continua, las listas también son un contenedor secuencial, pero se organizan de manera diferente.

## Cómo declarar una lista
Los elementos de la lista apuntan a su siguiente elemento, por lo que todos los elementos están ordenados en secuencia, pero no utilizan la indexación. ¿Cómo? Tu puedes preguntar. Lo hacen no mediante la indexación sino mediante una herramienta especial llamada iteradores. Los iteradores son como punteros especiales cuyo trabajo es mantener el orden de los elementos de la lista como el enlace entre dos vagones de tren. Aquí hay una buena visual de cómo se organizan las listas en comparación con los vectores y matrices.

![img](https://imgur.com/SiU8uTe.png)

## Tipos de lista

La librería STL tiene 2 tipos de listas

### std::forward_list *(A partir de C++11)*

Es una lista encadenada en una sola dirección, como la que se ve en el ejemplo
### std::list

Es una lista doblemente encadenada, guarda los punteros al elemento anterior y al siguiente, por lo que se puede recorrer hacia delante y hacia atrás.



## Cómo usar una lista

Si desea declarar una lista de números, escriba:

'' 'std :: list Números;'''
```
std::list<std::string> palabras {"hola", "mundo"};
```

Las listas contienen iteradores al primer _begin()_ y último elemento _end()_ que sirven para recorrer el contenedor en un bucle for basado en rangos de manera sencilla.
```
for (std::string palabra : palabras) {
std::cout << palabra << '\n';
}
```

Se pueden añadir elementos a la lista con los métodos push_back, push_front, insert...
```
palabras.push_back("de"); //Añade al final
palabras.push_front("Dije"); //Añade al comienzo
palabras.insert(palabras.end(), "C++"); //Añade al final, al obtener el iterador del final
```
También existen métodos emplace que permiten construir el objeto en el propio contenedor, mientras que usando los métodos anteriormente mostrados, se creará el objeto y luego se copiará al contenedor _(es probable que el compilador optimice esto último)_

La clase *forward_list* no contiene _push_back_ y ni _insert_. En cambio tiene _insert_after_ que permite insertar un elemento después del elemento apuntado por el iterador.

Otros métodos útiles son
#### erase

Borra un elemento del array a traves de un iterador

#### clear

Borra todo el contenedor

#### size

Retorna el tamaño de la lista

#### sort

Ordena la lista.

#### empty

Retorna verdadero si la lista está vacia

Todos los métodos están listados aquí
[List](https://en.cppreference.com/w/cpp/container/list)
[Forward list](https://en.cppreference.com/w/cpp/container/forward_list)