如果我们有两个迭代器,而我们想要找到总数。两个迭代器之间的元素数量,然后由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++。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。