Standard C++ Library
Copyright 1998, Rogue Wave Software, Inc.
NAME
distance
- Computes the distance between two iterators.
SYNOPSIS
#include <iterator>
template <class ForwardIterator>
iterator_traits<ForwardIterator>::difference_type
distance (ForwardIterator first,
ForwardIterator last);
template <class ForwardIterator, class Distance>
void distance (ForwardIterator first,
ForwardIterator last,
Distance& n);
DESCRIPTION
The distance template function computes the distance between
two iterators. The first version returns that value, while
the second version increments n by that value. The last
iterator must be reachable from the first iterator.
Note that the second version of this function is obsolete.
It is included for backward compatibility and to support
compilers that do not include partial specialization. The
first version of the function is not available with com-
pilers that do not support partial specialization, since it
depends on iterator_traits, which itself depends on that
particular language feature.
EXAMPLE
//
// distance.cpp
//
#include <iterator>
#include <vector>
#include <iostream>
using namespace std;
int main()
{
//
//Initialize a vector using an array
//
int arr[6] = {3,4,5,6,7,8};
vector<int> v(arr,arr+6);
//
//Declare a list iterator, s.b. a ForwardIterator
//
vector<int>::iterator itr = v.begin()+3;
//
//Output the original vector
//
cout << "For the vector: ";
copy(v.begin(),v.end(),
ostream_iterator<int,char>(cout," "));
cout << endl << endl;
cout << "When the iterator is initialized to point to "
<< *itr << endl;
//
// Use of distance
//
vector<int>::difference_type dist = 0;
distance(v.begin(), itr, dist);
cout << "The distance between the beginning and itr is "
<< dist << endl;
return 0;
}
Program Output
For the vector: 3 4 5 6 7 8
When the iterator is initialized to point to 6
The distance between the beginning and itr is 3
WARNINGS
If your compiler does not support default template parame-
ters, then you always need to supply the Allocator template
argument. For instance, you have to write:
vector <int, allocator,int> >
instead of:
vector <int>
If your compiler does not support partial specialization,
then you can't use the version of distance that returns the
distance. Instead you have to use the version that incre-
ments a reference parameter.
If your compiler does not support namespaces, then you do
not need the using declaration for std.
SEE ALSO
Sequences, Random_Access_Iterators