如果我們有兩個迭代器,而我們想要找到總數。兩個迭代器之間的元素數量,然後由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++。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。