我正在尝试获取迭代器指向的元素的索引。
struct job{
int start_time;
int finish_time;
int profit;
};
int latest_non_conflicting_job(std::vector<job>& vec, std::vector<job>::size_type& i)
{
for(std::vector<job>::reverse_iterator it = vec.rbegin()-i; it != vec.rend(); it++){
if(*it.finish_time <= vec[i].start_time){
return it-vec.begin();
}
}
return -1;
}
int main()
{
std::vector<job> vec = {{3, 10, 20}, {1, 2, 50}, {6, 19, 100}, {2, 100, 200}};
latest_non_conflicting_job(vec, vec.size());
return 0;
}
它告诉我错误:
error: no match for 'operator-' (operand types are 'std::vector<job>::reverse_iterator {aka std::reverse_iterator<__gnu_cxx::__normal_iterator<job*, std::vector<job> > >}' and 'std::vector<job>::iterator {aka __gnu_cxx::__normal_iterator<job*, std::vector<job> >}')
如果我理解正确的话,因为我的 vector 包含“作业”类型的元素,所以我需要重载 -operator 才能工作。
我知道的一种方法是我可以通过索引遍历 vector 来获得我的结果。
有没有其他方法可以让我在不重载运算符的情况下通过迭代器获取元素点的索引? 它仍然是一个相当不完善的代码,因为我还不太擅长迭代器和 vector ,所以请忽略它。
最佳答案
不,您不必实现任何运算符。问题在于您使用了两种不同类型的迭代器,iterator
和 reverse_iterator
。您始终可以使用 base()
访问指向下一个元素的 normal iterator
。
return it.base() - vec.begin() - 1;
关于c++ - 通过迭代器获取 vector 中的索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57947937/