當前位置: 首頁>>編程示例 >>用法及示例精選 >>正文


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++。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。