当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


C++ std::distance用法及代码示例


如果我们有两个迭代器,而我们想要找到总数。两个迭代器之间的元素数量,然后由std::distance(简化),该文件定义在头文件中。

它具有一个重要的特征,就像我们在科学中拥有向量一样,向量既具有幅度也具有方向,std::distance也具有与之相关的方向。这意味着计算第一个和最后一个之间的距离,然后计算最后一个和第一个之间的距离将是不一样的,因为在第二种情况下,由于我们向后移动,所以它将具有负号。

用法:

std::distance(InputIterator first, InputIterator last)
Here, first and last are input iterators between which we have to calculate distance.

返回: 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 <iostream> 
#include <vector> 
#include <iterator> 
using namespace std; 
int main() 
{ 
    vector<int> 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<int>::iterator first; 
    vector<int>::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

What happens when we reverse the order while calculating distance?

从那以后,它算不上。对于两个输入迭代器之间的元素,要记住的一件事是,在计算距离时,它不计算由last指向的元素(如果有),而由first指向的元素被计算为i,e range是[第一,最后]。

// C++ program to demonstrate the use of std::distance 
// with reverse order 
#include <iostream> 
#include <vector> 
#include <iterator> 
using namespace std; 
int main() 
{ 
    vector<int> 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

在这里,第一个(指向0)和最后一个(指向5)之间的元素总数为5,即0 1 2 34。因此,distance()尚未计算由last指向的元素。

时间复杂度:random-access迭代器的常量,所有其他迭代器的O(n)。



相关用法


注:本文由纯净天空筛选整理自 std::distance in C++。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。