📜  C++中的std :: distance

📅  最后修改于: 2021-05-30 13:03:55             🧑  作者: Mango

如果我们有两个迭代器,而我们想要找到总数。两个迭代器之间的元素数量,然后由头文件内定义的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等的更多准备工作,请参阅“完整面试准备课程”