我试图初始化一个矢量迭代器,这样我就可以在矢量中搜索一个元素。但是,当我尝试初始化它时,我收到转换错误。不确定问题是什么,有什么帮助吗?
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
答案 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说明符并让编译器处理类型推断。