2014-05-13 1 views
0

벡터의 요소를 검색 할 수 있도록 벡터 반복기를 초기화하려고합니다. 그러나 그것을 초기화하려고하면 변환 오류가 발생합니다. 문제가 무엇인지, 어떤 도움이 될지 모르십니까?벡터 반복기 초기화

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; 
} 

오류는 후보 기능 (암시 적 복사 할당 연산자) 가능한되지 않습니다 : '__normal_iterator'에서 당신이 하나를 작성해야

답변

3

1 인자 클래스 __normal_iterator에 대한 'const를 __normal_iterator'로 알려진 변환

vector<int>::const_iterator index; 

A은 요소가 변형 될 수없는 const 벡터입니다. 그리고 const_iterator는 읽기 전용 이었지만 가리키는 요소는 수정할 수 없었다.

+0

고맙습니다. 또한 인덱스가 벡터의 마지막 요소를 가리키는 지 알 수있는 방법이 있습니까? – jshah

+1

반복자를 생성합니다. 예를 들어 iterLast라는 이름을'A.end() - 1'과 같게 만들고'iterLast == index'를 확인합니다. 요소의 값에 액세스하지만 가리키는 것을 의미하지 않기 때문에'* index'를 검사하지 마십시오. – cbel

+0

A.end()에서 1을 빼면 주소 위치가 줄어들지 않습니다. – jshah

0

STL 반복기는 포인터의 일반화와 유사하며 const 데이터와 관련된 동일한 규칙을 따릅니다. STL 반복자는 해당 컨테이너의 일정 함을 반영해야합니다. 당신이 찾고있는 타입은 std :: vector :: const_iterator이다.

const int * 및 int *와 마찬가지로 반복기를 const_interator로 변환 할 수 있지만 iterator의 const_iterator는 변환 할 수 없습니다.

C++ 11을 사용하는 경우 자동 지정자를 사용하여 컴파일러에서 유형 유추를 처리 할 수 ​​있습니다.