std::advance in C++
std::advance advances the iterator 'it' by n element positions. Syntax :
template void advance (InputIterator& it, Distance n); it : Iterator to be advanced n : Number of element positions to advance. This shall only be negative for random-access and bidirectional iterators. Return type : None.
Motivation problem : A vector container is given. Task is to print alternate elements. Examples :
Input : 10 40 20 50 80 70 Output : 10 20 80
// C++ program to illustrate
// using std::advance
#include <bits/stdc++.h>
// Driver code
int main()
{
// Vector container
std::vector<int> vec;
// Initialising vector
for (int i = 0; i < 10; i++)
vec.push_back(i * 10);
// Printing the vector elements
for (int i = 0; i < 10; i++) {
std::cout << vec[i] << " ";
}
std::cout << std::endl;
// Declaring the vector iterator
std::vector<int>::iterator it = vec.begin();
// Printing alternate elements
while (it < vec.end()) {
std::cout << *it << " ";
std::advance(it, 2);
}
}
Output:
0 10 20 30 40 50 60 70 80 90 0 20 40 60 80
#include <iostream>
#include<bits/stdc++.h>
using namespace std;
int main() {
vector<int >vect(10);
//insert the ten element in the vector
for(int i=1;i<=10;i++)
{
vect[i-1]=i;
}
//iterator pointing to first element.
vector<int >::iterator it=vect.begin();
for(int i=1;i<=10;i++)
{
cout<<*it<<" ";
it++;
}
vector<int >::iterator it1=vect.begin();
//here it is pointing to the 3rd element.
advance(it1,2);//here second argument is the index base.
cout<<endl;
cout<<*it1;
//print it1 pointing to the 3rd position.
return 0;
}
/* This code is contributed by Sameer Hake/*
Output
1 2 3 4 5 6 7 8 9 10 3