如果我们有两个迭代器,而我们想要找到总数。两个迭代器之间的元素数量,然后由头文件内定义的std :: distance()进行简化。
它具有一个重要的特征,就像我们在科学中拥有向量一样,向量既具有幅度也具有方向,std :: distance也具有与之相关的方向。这意味着计算第一个和最后一个之间的距离,然后计算最后一个和第一个之间的距离将是不一样的,因为在第二种情况下,由于我们向后移动,所以它将具有一个负号。
句法:
std::distance(InputIterator first, InputIterator last)
Here, first and last are input iterators between which we have to calculate distance.
Returns: The number of elements between first and last.
例子:
Input: v = 10 20 30 40 50
first pointing to v.begin() and last pointing to v.end()
Output: No. of elements: 5
// C++ program to demonstrate std::distance()
#include
#include
#include
using namespace std;
int main()
{
vector v;
int i;
for (i = 0; i < 10; ++i)
{
v.push_back(i);
}
/*v contains 0 1 2 3 4 5 6 7 8 9*/
vector::iterator first;
vector::iterator last;
// first pointing to 0
first = v.begin();
// last pointing to 5
last = v.begin() + 5;
// Calculating no. of elements between first and last
int num = std::distance(first, last);
// Displaying num
cout << num << "\n";
return 0;
}
输出:
5
在计算距离时颠倒顺序会发生什么?
从那以后,它算不上。对于两个输入迭代器之间的元素,要记住的一件事是,在计算距离时,它不计算由last指向的元素(如果有的话),而由first指向的元素被计算为i,e range是[第一,最后]。
// C++ program to demonstrate the use of std::distance
// with reverse order
#include
#include
#include
using namespace std;
int main()
{
vector v;
int i;
for (i = 0; i < 10; ++i)
{
v.push_back(i);
}
// Calculating no. of elements in vector v
int num = std::distance(v.begin(), v.end());
// Displaying num
cout << num << "\n";
// Calculating in reverse order
num = std::distance(v.end(), v.begin());
// Displaying num
cout << num << "\n";
return 0;
}
输出:
10
-10
在这里,first(指向0)和last(指向5)之间的元素总数为5,即0 1 2 34。因此,last(指向)指向的元素没有被distance()计数。
时间复杂度:随机访问迭代器的常量,所有其他迭代器的O(n)。
要从最佳影片策划和实践问题去学习,检查了C++基础课程为基础,以先进的C++和C++ STL课程基础加上STL。要完成从学习语言到DS Algo等的更多准备工作,请参阅“完整面试准备课程” 。