2016-11-14 51 views
-1

我最近开始使用C++ STL,今天我试用了我的代码中的lower_bound函数。但不幸的是,我得到了错误:可以将lower_bound(来自C++ STL)的结果分配给整型变量吗?

cannot convert '__gnu_cxx::__normal_iterator<long long int*, std::vector<long long int> >' to 'long long int' in assignment| 

这里是我的代码

lli n; 
cin >> n; 
lli k; 
cin >> k; 

vector<lli> v; 
lli store; 
for(lli i = 0;i < n;i++) 
{ 
    cin >> store; 
    if(store < k) 
     v.push_back(store); 
} 

sort(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 << paths; 

如果你们说一个迭代器类型变量不能被添加到一个整数类型的变量,这个代码:

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,它已经使用宏定义。

如果您需要任何澄清,请询问。

+0

不,它不需要一个迭代器分配给整体变量。仔细阅读,并匹配括号。 – StoryTeller

+0

你的代码不能编译 - 看起来你缺少一些typedefs以及通常的include和main()函数。 –

回答

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()); 
相关问题