¿Qué es la lista de reenvío?
La lista de reenvío en STL se usa para implementar una lista enlazada individualmente. Se introdujo desde C++ 11 en adelante, las listas de reenvío son más útiles que otros contenedores en las operaciones de inserción, eliminación y movimiento (como ordenar) y permiten la inserción y eliminación constante de elementos en el tiempo.
Se diferencia de la lista por el hecho de que la lista de reenvío realiza un seguimiento de la ubicación solo del siguiente elemento, mientras que la lista realiza un seguimiento de los elementos anterior y siguiente, lo que aumenta el espacio de almacenamiento necesario para almacenar cada elemento.
El inconveniente de una lista hacia adelante es que no se puede iterar hacia atrás y no se puede acceder directamente a sus elementos individuales.
La lista de reenvío se prefiere a la lista cuando solo se requiere un recorrido hacia adelante (al igual que se prefiere la lista de enlaces simples a la lista de enlaces dobles) ya que podemos ahorrar espacio. Algunos casos de ejemplo son, enstringmiento en hashing, representación de lista de adyacencia del gráfico, etc.
Funciones asociadas con la lista de reenvío:
- push_front() : esta función se usa para insertar el elemento en la primera posición en una lista hacia adelante. El valor de esta función se copia en el espacio antes del primer elemento del contenedor. El tamaño de la lista de reenvío aumenta en 1.
- pop_front(): esta función se utiliza para eliminar el primer elemento de la lista.
- empty() : Devuelve si la lista está vacía (1) o no (0).
¿Qué es Lista?
Las listas son contenedores de secuencias que permiten la asignación de memoria no contigua. En comparación con el vector, la lista tiene un recorrido lento, pero una vez que se ha encontrado una posición, la inserción y la eliminación son rápidas. Normalmente, cuando decimos una Lista, hablamos de una lista doblemente enlazada. Para implementar una lista de enlace simple, usamos una lista de reenvío.
Funciones asociadas a una lista:
- front() : Devuelve el valor del primer elemento de la lista.
- back() : Devuelve el valor del último elemento de la lista.
- push_front(x) : Agrega un nuevo elemento ‘x’ al principio de la lista.
- push_back(x) : Agrega un nuevo elemento ‘x’ al final de la lista.
- empty() : Devuelve si la lista está vacía (1) o no (0).
¿Qué es Tupla?
Una tupla en C++ es un objeto que tiene la capacidad de agrupar varios elementos. Los elementos pueden ser del mismo tipo así como diferentes tipos de datos. Se puede acceder al orden en el que se inicializan los elementos de la tupla en el mismo orden.
Funciones asociadas a una tupla:
1. make_tuple(): Se utiliza para asignar tuplas con valores. Los valores pasados deben estar en orden con los valores declarados en la tupla.
2. get(): Se utiliza para acceder a los valores de la tupla y modificarlos, acepta el índice y el nombre de la tupla como argumentos para acceder a un elemento de la tupla en particular.
Reenviar lista de tuplas
En C++, una lista de tuplas hacia adelante es una lista hacia adelante en la que cada elemento es una tupla en sí misma. Aunque una tupla puede contener más o menos elementos, por simplicidad hemos usado tuplas que tienen solo tres elementos.
Sintaxis:
lista_delantera<tupla<tipo de datos1, tipo de datos2, tipo de datos3> myForwardList;
Aquí,
dataType1, dataType2 y dataType3 son tipos de datos similares o diferentes.
Ejemplo 1: a continuación se muestra el programa C++ para demostrar el funcionamiento de la lista de tuplas hacia adelante.
C++
// C++ program to demonstrate // the working of forward list // of tuples #include <bits/stdc++.h> using namespace std; // Function to print forward // list elements void print(forward_list<tuple<int, int, int>> &forwardListOftuples) { for (auto currentTuple : forwardListOftuples) { // Each element of the forward list is // a tuple itself tuple<int, int, int> tuple = currentTuple; cout << "[ "; // Printing tuple elements cout << get<0>(currentTuple) << ' ' << get<1>(currentTuple) << ' ' << get<2>(currentTuple); cout << ']'; cout << '\n'; } } // Driver code int main() { // Declaring a forward list of tuples // having integer values only forward_list<tuple<int, int, int> > forwardListOftuples; // Declaring a tuple tuple<int, int, int> tuple1; // Initializing the // tuple tuple1 = make_tuple(11, 22, 33); // Push the tuple at the back // in the forward list forwardListOftuples.push_front(tuple1); // Declaring another tuple tuple<int, int, int> tuple2; // Initializing the // tuple tuple2 = make_tuple(33, 44, 55); // Push the tuple at the front // in the forward list forwardListOftuples.push_front(tuple2); // Declaring another tuple tuple<int, int, int> tuple3; // Initializing the tuple tuple3 = make_tuple(55, 66, 77); // Push the tuple at the front // in the forward list forwardListOftuples.push_front(tuple3); // Declaring another tuple tuple<int, int, int> tuple4; // Initializing the tuple tuple4 = make_tuple(77, 88, 99); // Push the tuple at the front // in the forward list forwardListOftuples.push_front(tuple4); // Calling print function print(forwardListOftuples); return 0; }
Producción:
[ 77 88 99]
[ 55 66 77]
[ 33 44 55]
[ 11 22 33]
Ejemplo 2: a continuación se muestra el programa C++ para demostrar el funcionamiento de la lista de tuplas hacia adelante.
C++
// C++ program to demonstrate // the working of forward list // of tuples #include <bits/stdc++.h> using namespace std; // Function to print forward // list elements void print(forward_list<tuple<string, string, bool>> &forwardListOftuples) { for (auto currentTuple : forwardListOftuples) { // Each element of the forward list is // a tuple itself tuple<string, string, bool> tuple = currentTuple; cout << "[ "; // Printing tuple elements cout << get<0>(currentTuple) << ' ' << get<1>(currentTuple) << ' ' << get<2>(currentTuple); cout << ']'; cout << '\n'; } } // Driver code int main() { // Declaring a forward list of tuples // having first two values of string // type and third value as bool type forward_list<tuple<string, string, bool>> forwardListOftuples; // Declaring a tuple tuple<string, string, bool> tuple1; // Initializing the // tuple tuple1 = make_tuple("GeeksforGeeks", "Computer Science", 0); // Push the tuple at the back // in the forward list forwardListOftuples.push_front(tuple1); // Declaring another tuple tuple<string, string, bool> tuple2; // Initializing the // tuple tuple2 = make_tuple("Java", "C++", 1); // Push the tuple at the front // in the forward list forwardListOftuples.push_front(tuple2); // Declaring another tuple tuple<string, string, bool> tuple3; // Initializing the tuple tuple3 = make_tuple("GFG", "C", 1); // Push the tuple at the front // in the forward list forwardListOftuples.push_front(tuple3); // Declaring another tuple tuple<string, string, bool> tuple4; // Initializing the tuple tuple4 = make_tuple("Swift", "Python", 0); // Push the tuple at the front // in the forward list forwardListOftuples.push_front(tuple4); // Calling print function print(forwardListOftuples); return 0; }
Producción:
[Swift Python 0]
[GFG C 1]
[Java C++ 1]
[GeeksforGeeks Informática 0]
Lista de tuplas
En C++, una lista de tuplas es una lista en la que cada elemento es una tupla en sí misma. Aunque una tupla puede contener más o menos elementos, por simplicidad hemos usado tuplas que tienen solo tres elementos.
Sintaxis:
lista<tupla<tipodatos1, tipodatos2, tipodatos3> miLista;
Aquí,
dataType1, dataType2 y dataType3 son tipos de datos similares o diferentes.
Ejemplo 1: A continuación se muestra el programa C++ para demostrar el funcionamiento de la lista de tuplas.
C++
// C++ program to demonstrate // the working of list of tuples #include <bits/stdc++.h> using namespace std; // Function to print // list elements void print(list<tuple<int, int, int>> &listOftuples) { for (auto currentTuple : listOftuples) { // Each element of the List is // a tuple itself tuple<int, int, int> tuple = currentTuple; cout << "[ "; // Printing tuple elements cout << get<0>(currentTuple) << ' ' << get<1>(currentTuple) << ' ' << get<2>(currentTuple); cout << ']'; cout << '\n'; } } // Driver code int main() { // Declaring a List of tuples // having all values of integer type list<tuple<int, int, int>> listOftuples; // Declaring a tuple tuple<int, int, int> tuple1; // Initializing the // tuple tuple1 = make_tuple(11, 22, 33); // Push the tuple at the back // in the List listOftuples.push_front(tuple1); // Declaring another tuple tuple<int, int, int> tuple2; // Initializing the // tuple tuple2 = make_tuple(33, 44, 55); // Push the tuple at the front // in the List listOftuples.push_front(tuple2); // Declaring another tuple tuple<int, int, int> tuple3; // Initializing the tuple tuple3 = make_tuple(55, 66, 77); // Push the tuple at the front // in the List listOftuples.push_front(tuple3); // Declaring another tuple tuple<int, int, int> tuple4; // Initializing the tuple tuple4 = make_tuple(77, 88, 99); // Push the tuple at the front // in the List listOftuples.push_front(tuple4); // Calling print function print(listOftuples); return 0; }
Producción:
[ 77 88 99]
[ 55 66 77]
[ 33 44 55]
[ 11 22 33]
Ejemplo 2: A continuación se muestra el programa C++ para demostrar el funcionamiento de la lista de tuplas.
C++
// C++ program to demonstrate // the working of list of tuples #include <bits/stdc++.h> using namespace std; // Function to print // list elements void print(list<tuple<string, string, bool>> &listOftuples) { for (auto currentTuple : listOftuples) { // Each element of the List is // a tuple itself tuple<string, string, bool> tuple = currentTuple; cout << "[ "; // Printing tuple elements cout << get<0>(currentTuple) << ' ' << get<1>(currentTuple) << ' ' << get<2>(currentTuple); cout << ']'; cout << '\n'; } } // Driver code int main() { // Declaring a List of tuples // having first two values as string type // and third value is of bool type list<tuple<string, string, bool>> listOftuples; // Declaring a tuple tuple<string, string, bool> tuple1; // Initializing the // tuple tuple1 = make_tuple("GeeksforGeeks", "Computer Science", 0); // Push the tuple at the back // in the List listOftuples.push_front(tuple1); // Declaring another tuple tuple<string, string, bool> tuple2; // Initializing the // tuple tuple2 = make_tuple("Java", "C++", 1); // Push the tuple at the front // in the List listOftuples.push_front(tuple2); // Declaring another tuple tuple<string, string, bool> tuple3; // Initializing the tuple tuple3 = make_tuple("GFG", "C", 1); // Push the tuple at the front // in the List listOftuples.push_front(tuple3); // Declaring another tuple tuple<string, string, bool> tuple4; // Initializing the tuple tuple4 = make_tuple("Swift", "Python", 0); // Push the tuple at the front // in the List listOftuples.push_front(tuple4); // Calling print function print(listOftuples); return 0; }
Producción:
[Swift Python 0]
[GFG C 1]
[Java C++ 1]
[GeeksforGeeks Informática 0]