无法将<int *,std :: vector <int =“”>&gt;'转换为'int *&#39;

时间:2017-11-02 20:15:44

标签: c++ function pointers vector compiler-errors

我试图通过使用pair.first和pair.second找到元素的下限和上限

使用gcc编译时出现以下错误:

zco.cpp: In function ‘int main()’:
zco.cpp:136:47: error: cannot convert 
‘__gnu_cxx::__normal_iterator<int*, std::vector<int> >’ to ‘int*’ in 
initialization
int *a = lower_bound(x.begin(), x.end(),temp1);
                                           ^
zco.cpp:137:47: error: cannot convert 
‘__gnu_cxx::__normal_iterator<int*, std::vector<int> >’ to ‘int*’ in 
initialization
int *b = upper_bound(y.begin(), y.end(),temp2);

代码:

int main(){
    int N,X,Y;
    scanf("%d %d %d",&N,&X,&Y);
    vector< pair<int,int> > n(N);
    for(int i=0;i<N;i++){
        int temp1,temp2;
        scanf("%d %d",&temp1,&temp2);
        n[i] = make_pair(temp1,temp2);
    }
    vector<int> x(X);
    for(int i=0;i<X;i++){
        scanf("%d",&x[i]);
    }
    vector<int> y(Y);
    for(int i=0;i<Y;i++){
        scanf("%d",&y[i]);
    }
    stable_sort(n.begin(), n.end());
    stable_sort(x.begin(), x.end());
    stable_sort(y.begin(), y.end());
    int sum = 0;
    for(int i=0;i<N;i++){
        int temp1 = n[i].first;
        int temp2 = n[i].second;
        int *a = lower_bound(x.begin(), x.end(),temp1);
        int *b = upper_bound(y.begin(), y.end(),temp2);
        sum += b-a+1;
    }
    printf("%d",sum);
}

如何解决此错误。请帮帮我。

2 个答案:

答案 0 :(得分:2)

您需要一个矢量迭代器,而不是指向其数据类型的指针,如下所示:

std::vector<int>::iterator temp1;
std::vector<int>::iterator temp2;

检查std::lower_bound的参考及其示例以获取更多信息。

答案 1 :(得分:1)

以下是如何将迭代器转换为指针,首先取消引用迭代器,它将产生一个引用(在您的情况下为int),然后获取引用值的地址。这给出了:

std::vector<int>::iterator it_a = std::lower_bound(x.begin(), x.end(),temp1);
int& ref_a = *it_a;
int* ptr_a = &ref_a;

所有这些都可以在一个语句中完成,这使得转换变得微不足道:

int *a = &*std::lower_bound(x.begin(), x.end(),temp1);