Requisito previo: C++ STL , Iteradores en C++ STL
El iterador no es la única forma de iterar a través de cualquier contenedor STL . Existe una forma mejor y más eficiente de iterar a través de vectores sin usar iteradores. Se puede iterar utilizando los valores almacenados en cualquier contenedor. A continuación se muestra la sintaxis de la misma para los vectores:
Sintaxis:
for(auto itr : vector_name)
Explicación: aquí itr es el valor almacenado en el vector que se utiliza para atravesar vectores. A continuación se muestra el programa para ilustrar lo mismo:
// C++ program to illustrate the above // topic #include <bits/stdc++.h> using namespace std; // Driver Code int main() { // Declare the vector vector<int> arr = { 1, 2, 3, 4 }; // Traversing the vector using // values directly for (auto& it : arr) { // Print the values cout << it << ' '; } return 0; }
1 2 3 4
Actualización de valores en vector: para actualizar valores en un vector sin usar iteradores, recorra los valores almacenados en el vector usando referencia y actualice el valor. A continuación se muestra la sintaxis para el mismo:
Sintaxis:
for(auto &itr : vector_name)
Explicación: aquí itr es una dirección para el valor almacenado en el vector que se utiliza para atravesar vectores. A continuación se muestra el programa para ilustrar lo mismo:
// C++ program to illustrate the updation // in vector without using iterator #include <bits/stdc++.h> using namespace std; // Function to update the value in vector void updateVector(vector<int> arr) { cout << "Vector Before Update: "; for (auto& it : arr) { cout << it << ' '; } // Traverse using the reference to value // and multiply each value by 2 for (auto& it : arr) { it *= 2; } cout << "\nVector After Update: "; // Print vector elements for (auto& it : arr) { cout << it << ' '; } } // Driver Code int main() { // Declare the vector vector<int> arr = { 1, 2, 3, 4 }; // Function Call updateVector(arr); return 0; }
Vector Before Update: 1 2 3 4 Vector After Update: 2 4 6 8
ventajas:
- Código simple y fácil de escribir.
- Mejor y eficiente que usar el método de iteradores.
Desventajas:
- Se itera solo en la dirección de avance.
- No mantiene ningún contador, es decir, no podemos encontrar el índice de ningún elemento con este recorrido. Para contar el elemento, el contador debe tomarse explícitamente.
También podemos iterar usando el mismo recorrido en muchos Contenedores diferentes en C++ . A continuación se muestra la ilustración de la misma:
- Mapa:
// C++ program to illustrate the iteration
// in Map without using iterator
#include <bits/stdc++.h>
using
namespace
std;
// Driver Code
int
main()
{
// Declare the map
map<
int
,
int
> Mp;
// Inserting values in Map
Mp[1] = 1;
Mp[2] = 2;
Mp[3] = 3;
// Iterate using value in Map
for
(
auto
it : Mp) {
// Print the elements
cout << it.first <<
' '
<< it.second << endl;
}
return
0;
}
Producción:1 1 2 2 3 3
- Mapa de Vectores:
// C++ program to illustrate the iteration
// in Map of vectors without using iterator
#include <bits/stdc++.h>
using
namespace
std;
// Driver Code
int
main()
{
// Declare the map of vectors
map<
int
, vector<
int
> > Mp;
// Temporary vector
vector<
int
> temp = { 1, 2, 3 };
// Inserting values in Map
Mp[1] = temp;
temp = { 2, 3, 8, 9 };
Mp[2] = temp;
temp = { 10, -2 };
Mp[3] = temp;
// Iterate using value in Map of vectors
for
(
auto
it : Mp) {
// Print the elements
cout << it.first <<
" -> "
;
// Traverse each vector map
// with it.first and print the
// elements
for
(
auto
jt : it.second) {
cout << jt <<
' '
;
}
cout << endl;
}
return
0;
}
Producción:1 -> 1 2 3 2 -> 2 3 8 9 3 -> 10 -2
- Establecer:
// C++ program to illustrate the iteration
// in set without using iterator
#include <bits/stdc++.h>
using
namespace
std;
// Driver Code
int
main()
{
// Declare the set
set<
int
> S;
// Inserting values in set
S.insert(3);
S.insert(-1);
S.insert(3);
S.insert(4);
// Iterate using value in set
for
(
auto
it : S) {
// Print the elements
cout << it <<
' '
;
}
return
0;
}
Producción:-1 3 4
- Deque:
// C++ program to illustrate the iteration
// in deque without using iterator
#include <bits/stdc++.h>
using
namespace
std;
// Driver Code
int
main()
{
// Declare the deque
deque<
int
> dq;
// Inserting values in deque
dq.push_front(1);
dq.push_front(2);
dq.push_front(3);
dq.push_back(4);
dq.push_back(5);
// Iterate using value in set
for
(
auto
it : dq) {
// Print the elements
cout << it <<
' '
;
}
return
0;
}
Producción:3 2 1 4 5
Publicación traducida automáticamente
Artículo escrito por sarthak_eddy y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA