2012-04-05 4 views
1

STL 컨테이너 (예 : std :: vector)를 사용하여 메모리에서 인접한 Matrix 변수 (즉, 정렬 된 열 벡터 모음)를 찾는 방법을 찾고 있습니다.). &mat[1][0]Ncolumn1의 길이 &mat[0][N-1] + 1, 동일하지 않은 것을 의미에서 연속되지STL 컨테이너를 사용하여 연속 행렬 변수 만들기

vector< vector<float> > mat; 
mat.push_back (column1); // column1 is of type vector<float> 
mat.push_back (column2); // column2 is of type vector<float> 

: 하나 개의 옵션이 있습니다. 메모리의 연속이지만, 저를 시행

vector<float> mat; 
float f1[] = {1., 2., 3.}; 
float f2[] = {4., 5., 6.}; 
mat.insert (mat.end(), f1, f1 + 3); 
mat.insert (mat.end(), f2, f2 + 3); 

는 수레의 배열을 사용하려면 :

또 다른 옵션

이있다.

편집

분명히하기 위해, 나는 vector < vector<float> > 같은 옵션을 선호하는, 그래서는 STL 벡터로 지정된 열을 액세스 할 수 있습니다.

+0

무엇이 질문입니까? –

+0

그리고'mat.insert (mat.end(), f2, f2 + 3)가 아닌가? ' –

+0

왜 메모리에서 연속적이어야합니까? –

답변

3

std::vector<float>을 저장소의 백엔드로 사용하는 자체 매트릭스 클래스를 작성합니다.

0

this이 도움이되는지 확인하십시오 (열 - 주요 저장 영역을 원할 경우 소스 코드를 수정해야 할 수 있습니다).

2

서브 클래스 a vector<float>. 크기가 rowSize*colSize입니다. 메모리는 하나의 단일 벡터이므로 연속적입니다.

열을 벡터로 액세스하는 부분에서는 열의 범위를 표시하기 위해 두 개의 반복기를 사용하여 열을 액세스하는 방법을 고려하십시오. 열에 알고리즘을 적용하여 RandomAccessIterator 적합 반복자로 작업하거나 Column 클래스를 사용하여 두 반복자를 래핑하여 시작 반복자의 주소를 T& operator[](size_t)에 계산합니다.

+0

표준 클래스에서 파생되지는 않지만 구성을 사용하십시오. – GManNickG

+0

너무 좋습니다. – devil

2

데이터가 실제로 연속적인지 확인하려면 요구 사항에 따라 정적 또는 동적 크기의 단일 배열 유형 개체를 기반으로해야하며 모든 책 관리 및 액세스를 처리해야한다고 생각합니다. boost matrices을보십시오. 얼마 전 나는 static-sized matrices에서 일했으며, 그 물건을 사용하지 않을 것을 제안했지만, 어떻게 할 수 있는지 (예전의. 패션 된) 예가되었습니다.

관련 문제