2012-02-08 3 views
0

는 내가 두 const_iterators을 만들 스파 스 매트릭스, 내 구현을 테스트하기 위해 MAIN.CPP을하고 있어요 초기 cout도하지 않습니다.)하지만 두 개의 반복기를 만들면 작동합니다. const_iterators의 시작과 끝을 구현 한 방법은 다음과 같습니다.이상한 const_iterator를 동작

const_iterator begin() const 
{ 
    cout<<"Begin"<<endl; 
    int minr=minRow(); 
    int minc=minCol(findRow(minr)); 
    mcol * mc=findCol(findRow(minr),minc); 
    const_iterator x; 
    if(mc!=NULL) 
    { 
     T* dato=&(mc->data); 
     x= const_iterator(genElement(minr,minc,dato)); 
    } 
    else 
    { 
     x=const_iterator(NULL); 
    } 
    x.setSM(const_cast<SparseMatrix<T>*>(this)); 
    return x; 
} 

const_iterator end() const 
{ 
    cout<<"End"<<endl; 
    const_iterator x= const_iterator(NULL); 
    x.setSM(const_cast<SparseMatrix<T>*>(this)); 
    return x; 
} 

내가 눈치 이상한 것은 내가 희소 행렬의 클래스 메소드 내부에 두 개의 const_iterators를 만들 경우, 그들이 일하는 것입니다.

당신이 말하는 것처럼
+0

생성되지 않았다는 것을 어떻게 알 수 있습니까? 대부분 컴파일러는 사용되지 않았기 때문에이를 최적화했습니다. –

+0

코드가 계속해서 오류가 발생하기 때문에 const_iterator 연산자 ++()가 할당되지 않은 메모리 영역을 읽으려고합니다. 왜냐하면 begin() 및 end()가 할당되지 않았기 때문입니다. – Vektor88

+0

나는 ' 게시 한 코드에 명백한 오류가 있는지 확인하십시오. 문제가있는 최소한의 완벽하게 편집 가능한 프로그램을 보여줄 수 있습니까? –

답변

2

, "mata [원문] 이전에 SparseMatrix<double>으로 만들어"하지만 당신이 보여 당신의 beginendconst을 표시됩니다. 해당 const 구성원 함수를 호출하려면 meta 개체는 const이어야하며 그렇지 않은 경우 및 endconst 버전이 필요합니다.

+0

const가 아닌 객체에서이 객체를 호출하려면 어떻게해야합니까? 읽기 전용 권한이있는 const 반복자와 쓰기 권한이있는 일반 반복기가 필요합니다. – Vektor88

+1

@ Vektor88 일반적으로 사람들은 'const' 멤버 함수가 아닌'iterator'를 반환하고'const' 버전은'const_iterator'를 반환합니다. 또한 원한다면'const_iterator'를 반환하는'const' 함수'cbegin'을 가질 수 있습니다. –