初始化矢量迭代器

时间:2014-05-13 00:41:18

标签: c++ vector iterator

我试图初始化一个矢量迭代器,这样我就可以在矢量中搜索一个元素。但是,当我尝试初始化它时,我收到转换错误。不确定问题是什么,有什么帮助吗?

int solution(int K, const vector<int> &A) {
    int count=0,size,comp=0;
    //int *index;
    vector<int>::iterator index;

    size = A.size();

    for(int i=0;i<size;i++){
        comp = K-A[i];
        index = find(A.begin(),A.end(),comp);
        cout <<"index: " << *index << endl;
        if(*index + A[i] == K)
            count++;
    }
    return count;
}

错误是候选函数(隐式复制赋值运算符)不可行:没有已知的转换       &#39; __ normal_iterator&#39; to&#39; const __normal_iterator&#39;第一个论点     class __normal_iterator

2 个答案:

答案 0 :(得分:4)

你应该写这个

vector<int>::const_iterator index;

因为A是const向量,其元素不能被变异。 const_iterator用于只读,但不能修改它指向的元素。

答案 1 :(得分:0)

STL迭代器就像指针的泛化一样,遵循与const数据相同的规则。 STL迭代器需要反映相关容器的常量。您正在寻找的类型是std :: vector :: const_iterator。

与const int *和int *类似,您可以将迭代器转换为const_interator,但不能将const_iterator转换为迭代器。

如果您使用的是C ++ 11,那么您可以使用auto说明符并让编译器处理类型推断。