以下代码可以正常使用:
#include<vector>
#include<algorithm>
#include<iostream>
using namespace std;
int main()
{
vector<int> v1;
vector<int>::iterator it, low, up;
for (int i=1; i<=10; i++)
v1.push_back(i);
cout << "elements are- \n";
for(it=v1.begin(); it!=v1.end(); it++)
cout << *it << " ";
sort(v1.begin(), v1.end());
low = lower_bound(v1.begin(), v1.end(), 3);
up = upper_bound(v1.begin(), v1.end(), 6);
cout << "\npos of low- " << (low-v1.begin()) << "\n";
cout << "pos of up- " << (up-v1.begin()) << endl;
return 0;
}
但是如果容器的类型从vector更改为list,则编译失败。它显示以下错误:
In function 'int main()': 20:35: error: no match for 'operator-'
(operand types are 'std::list<int>::iterator {aka
std::_List_iterator<int>}' and 'std::list<int>::iterator {aka
std::_List_iterator<int>}')
答案 0 :(得分:1)
S
效果很好。 (虽然它没有那么高效。)你试图从另一个迭代器中减去一个迭代器是不是什么,因为std::lower_bound
不是一个随机访问迭代器而且不支持减法。
为了将来参考,如果您发布一段代码和一个带行号的错误,您应该以某种方式指明代码中的哪一行。 SO在其代码片段中不包含行号,即使它确实如此,我们也无法保证它们实际上与您编译的代码对齐(即您没有在某处删除某些行)。