logo

Llista de reenviament a C ++ STL

Endavant_list El contenidor proporciona la implementació de Llista enllaçada individualment Estructura de dades. Emmagatzema dades en memòria no contigua on cada element apunta a l’element següent de la seqüència. Això fa que la inserció i la supressió siguin més ràpides un cop coneguda la posició de l’element.

Sintaxi

La llista de reenviament es defineix com a std :: Forward_list plantilla de classe dins del< endavant_list > fitxer de capçalera.



endavant_listfl;

on

  • T: Tipus de dades d’elements a la llista de reenviament.
  • F: Nom assignat a la llista de reenviament.

Declaració i inicialització

Es pot declarar i inicialitzar una llista FORVER_LISTA de diverses maneres, tal com es mostra a l'exemple següent:



mides de text de làtex
C++
#include    using namespace std; void printFL(forward_list<int>& fl) {  for (auto i : fl)  cout << i << ' ';  cout << 'n'; } int main() {    // Creating an empty forward_list  forward_list<int> fl1;  // Creating a forward_list with  // default value  forward_list<int> fl2(3 4);    // Creating a forward_list from an  // initializer list  forward_list<int> fl3 = {1 5 3 4};    printFL(fl2);  printFL(fl3);  return 0; } 

Producció
4 4 4 1 5 3 4 

Exemple: Al programa anterior, som una llista de reenviament inicialment inicial de tres maneres:

  • Declaració endavant_list Fl1 Crea una llista de nombrosos sencers buits.
  • Declaració endavant_list FL2 (34) Crea una llista de reenviament de la mida 3 i cada element és de 4.
  • Declaració endavant_list fl3 = {1 5 3 4} Crea una llista de reenviament i es inicialitza amb els elements formant la llista inicialitzadora.

Operacions bàsiques

A continuació, es mostren les operacions bàsiques que podem realitzar en una llista de endavant:

1. Accés alements

No es pot accedir als elements de la llista de reenviament mitjançant índexs com matrius o vectors. Hem de passar per la llista seqüencialment des del començament fins a la posició desitjada per accedir -hi. Això es pot fer incrementant començar () iterador, però és millor utilitzar -lo Següent () o Advance () funció.



No obstant això, es pot accedir fàcilment al primer element de la llista Front () Mètode.

Exemple:

C++
#include    using namespace std; int main() {  forward_list<int> fl = {1 5 3 4};  // Access the first element  cout << fl.front() << endl;    // Access third element  auto it = next(fl.begin() 2);  cout << *it;  return 0; } 

Producció
1 3

Exemple: Al programa anterior, el primer element s'imprimeix mitjançant l'ús Front () Mètode. Per accedir al tercer element Següent () s'utilitza per moure les dues posicions iterator des del principi i *it s'utilitza per desfer el iterador.

2. Inserir elements

Els elements es poden inserir a la llista de reenviament mitjançant inserir_after () funció. Requereix el iterador després del qual s'ha d'inserir l'element. No obstant això, la inserció ràpida a la part frontal és suportada per push_front () Mètode.

Exemple:

cicle de vida sdlc
C++
#include    using namespace std; int main() {  forward_list<int> fl = {5 4};  // Inserting Element at front  fl.push_front(1);    // Insert 3 after the second element  auto it = fl.begin();  advance(it 1);  fl.insert_after(it 3);    for (auto x: fl) cout << x << ' ';  return 0; } 

Producció
1 5 3 4 

Explicació: En aquest programa s'insereix el primer element del Forward_list a la part frontal mitjançant el push_front () funció. A continuació, es crea un iterador i es mou una posició cap endavant mitjançant el Advance () funció. Després, l'element 5 s'insereix després del segon element mitjançant el inserir_after () funció.

3. Actualització d'elements

El valor dels elements existents es pot canviar simplement accedint -los i utilitzant -los operador d'assignació per assignar el nou valor.

Exemple:

C++
#include    using namespace std; int main() {  forward_list<int> fl = {1 5 3 4};  // Updating first element  fl.front() = 111;  cout << fl.front() << endl;    // Updating third element  auto it = next(fl.begin() 2);  *it = 333;  cout << *it;  return 0; } 

Producció
111 333

4. Element de cerca

La llista de reenviament no proporciona cap funció de membre per cercar un element, però podem utilitzar el trobar () Algoritme per trobar qualsevol valor determinat.

Exemple :

C++
#include    using namespace std; int main() {  forward_list<int> fl = {1 5 3 4};  // Finding 3  auto it = find(fl.begin() fl.end() 3);    if (it != fl.end()) cout << *it;  else cout << 'Element not Found';  return 0; } 

Producció
3

5. Traversing

Es pot travessar una llista de reenviament mitjançant començar () i End () Els iteradors amb un bucle, però només podem avançar i no enrere.

Exemple:

C++
#include    using namespace std; int main() {  forward_list<int> fl = {1 5 3 4};    // Traversing using range-based for loop  for(auto i : fl)  cout << i << ' ';  cout << endl;    return 0; } 

Producció
1 5 3 4 

6. Elements de supressió

A la llista de reenviament podem eliminar l'element a la posició donada mitjançant Erase_after () Mètode. Aquest mètode porta el iterador a una posició abans de l'element objectiu. És possible la supressió ràpida de la part frontal pop_front () Mètode.

llistes java

Exemple:

C++
#include    using namespace std; int main() {  forward_list<int> fl = {1 5 3 4};  // Delete first element  fl.pop_front();    // Delete third element  auto it = fl.begin();  advance(it 1);  fl.erase_after(it);    for (auto x: fl) cout << x << ' ';  return 0; } 

Producció
5 3 

7. Mida de la llista de reenviament

Forward_list no té una funció de mida integrada (). Per trobar la seva mida, hem de comptar manualment els elements travessant -lo amb un bucle o amb la distància std ::.

C++
#include    #include  #include    using namespace std; int main() {  forward_list<int> flist={10203040};  //Calculate size by counting elements using std:: distance  int size=distance(flist.begin()flist.end());  cout<<'Size of forward_list: '<<size<<endl;  return 0; } 

Producció
Size of forward_list: 4 

8. Buit ()

S'utilitza per comprovar si la llista Forward_ està buida.
Retorna és cert si la llista està buida i falsa en cas contrari, permet verificar ràpidament si el contenidor no té dades.

C++
#include    #include  using namespace std; int main() {  forward_list<int> flist;  if (flist.empty()) {  cout << 'The forward_list is empty.' << endl;  }  flist.push_front(10);  if (!flist.empty()) {  cout << 'The forward_list is not empty.' << endl;  }  return 0; } 

Producció
The forward_list is empty. The forward_list is not empty. 

Complexitat temporal

La taula següent mostra la complexitat del temps de les operacions anteriors a la llista de reenviament:

Operació Complexitat temporal
Accediu al primer element O (1)
Accés Nthelement O (n)
Introduïu al davant O (1)
Inseriu després de la posició específica O (n)
Suprimeix el primer element O (1)
Suprimeix després de la posició específica O (n)
Travessal O (n)

Reenviar la llista vs llista

Distintiu

endavant_list

inscriure

Tipus de llista enllaçada

Llista enllaçada individualment

Llista doblement enllaçada

Travessal

Només pot recórrer endavant

Pot recórrer tant cap endavant com cap enrere

Ús de la memòria

Utilitza menys memòria (només un punter per node)

funcions de cadena en java

Utilitza més memòria (dos indicadors per node)

Inserció/supressió

Inserció i supressió ràpida, però només a o després d'una posició determinada

Inserció i supressió ràpida en qualsevol lloc (abans o després d'una posició)

Funcions compatibles

Limitat en comparació amb la llista (sense mida () sense niteradors inversos)

Interfície més completa inclosa la mida () inversa () iterators bidireccionals.



llista c#