2013-07-04 6 views
0
typedef map<int, double> SparseRow; 
template <int N> struct SparseMatrix 
{ 
map<int, SparseRow> data; 
}; 


const int N = 5; 
SparseMatrix<N> sparseMat; 

여기서 템플릿 유형 N이 어떻게 사용되는지 혼란 스럽습니까? 아무도 왜이지도를 고정 크기로 만드는지 설명 할 수 있습니까?고정 크기지도를 만들 때 템플릿을 어떻게 사용합니까?

/////////////////////////////////////

편집

이 인쇄 기능과

print(sparseMat); 

    template <int N> 
void print(SparseMatrix<N>& sm) 
{ 
SparseRow sr; 
SparseRow::const iterator it; 
for (int row = 0; row < N; row++) 
{ 
SparseRow sr = sm.data[row]; 
// Now iterate over row 
for (it = sm.data[row].begin(); it != sm.data[row].end(); 
it++) 
{ 
cout << (*it).second << ", "; 
} 
cout << endl; 
} 
} 

를 호출하면 어떻게 값이 N 함수에 전달됩니까되고, 만약이 아니 함수 호출에? SparseMatrix의 인스턴스가 5를 가정하는 것과 같은 값을 저장하는 방법에 대해 혼란 스럽습니다.

+1

매개 변수 N은 표시된 코드에서 사용되지 않습니다. – interjay

+0

지도가 고정 된 크기로 된 이유는 무엇입니까? –

+2

그게 뭐라고 생각하니? – interjay

답변

2

누구든지이지도를 고정 크기로 만드는 이유를 설명 할 수 있습니까?

표준 라이브러리에는 고정 크기지도 같은 것이 없습니다. 넌 - 타입 템플릿 인자 N은 우리에게 보여준 템플릿 안에 실제로 사용되지 않습니다. 이지도가 5 개 요소 이상으로 커지지는 않지만 템플릿 인수로 만드는 직접적인 이점이 없다는 것을 보장하기 위해 사용될 수 있으며, 이는 일반 변수 일 수도 있습니다. 행렬의 각 row 이전에 제대로 초기화 된 경우 분명히 그에만 작동합니다 - 에서

은 (편집 후) 코드 당신이 N 내부지도의 크기로 사용되는 것을 볼 수 있습니다를 추가했다. 그러나이 코드의 어떤 것도 저자가 왜 데이터 멤버가 아닌 템플릿 인수를 만들기로 결정했는지를 가리키는 것은 아닙니다.

+0

그래서 저자는 왜 그것을 언급 했습니까? –

+1

저자에게 물어보아야합니다. 표시 한 내용은 자신의 진술을 제외하면 고정 크기임을 나타냅니다. –

+0

편집을 확인하십시오 –

관련 문제