可以将lower_bound(From C ++ STL)的结果分配给整数类型变量吗?

时间:2016-11-14 11:30:13

标签: c++ stl

我最近开始使用C ++ STL,今天我在我的代码中尝试了lower_bound函数。但不幸的是,我得到了错误: 无法转换'__gnu_cxx :: __ normal_iterator< long long int *,std :: vector< long long int> >”分配给'long long int' 这是我的代码 lli n; cin>> N; lli k; cin>> K表; 矢量< LLI> v; lli商店; for(lli i = 0; i< n; i ++) {     cin>>商店;     if(store< k)         v.push_back(存储); } 排序(v.begin(),v.end()); lli paths = 0; for(lli i =(lli)v.size() - 1; i> = 0; i--)     paths = paths + lower_bound(v.begin(),v.begin()+ i-1,v [i] -k); cout<<路径; 如果你们说迭代器类型变量不能添加到整数类型变量,则此代码: https://github.com/sampritipanda/IOI_Repository/blob/master/ZCO/2013/CHEWING.cpp 使用lower_bound的结果通过以下行分配给整数类型变量: int j = lower_bound(gum.begin()+ i,gum.end(),K - gum [i]) - (gum.begin()+ i); 请告诉我哪里出错了。 注意:lli代表已经使用宏定义的long long int。 如果您需要任何澄清,请询问。

1 个答案:

答案 0 :(得分:1)

不,您不能将迭代器分配给整数变量。

lower_bound(gum.begin() + i, gum.end(), K - gum[i]) - (gum.begin() + i);

将返回std::vector<int>::difference_type

您可以做的最好的事情是:

paths = paths + (lower_bound(v.begin(),v.begin()+i-1,v[i]-k) - v.begin());