2012-10-20 7 views
0

float** 매개 변수를 사용하는 함수가 있습니다. 변수의 값이 std::vector<std::vector<float>>입니다.std :: vector <std :: vector <float>>을 float으로 변환 **

float*[] 임시 할당하지 않고 이러한 변환을 수행 할 수 있습니까?

+0

예입니다. 너 뭐 해봤 니? 단순히 메모리를 할당 한 다음 2 for 루프를 사용하고 두 벡터를 반복하는 것입니다. – ApplePie

답변

3

직접적으로는 아니지만 "내부"벡터의 데이터를 복사 할 필요는 없습니다. 대신 각 내부 벡터의 data() 특성에 대한 포인터 배열을 만들 수 있습니다.

0

float**에 두 개의 루프가있는 vector<vector<float> > 값을 입력하여 변환해야합니다.

어쨌든 float* 내부를 할당해야합니다.

2

이 작동합니다 :

std::vector<std::vector<float>> source; 

std::vector<float*> target(source.size()); 
for (int i = 0; i < source.size(); ++i) 
    target[i] = &*source[i].begin(); 

을 당신이 내부 std::vector<>의 복사 할 필요가 없습니다 볼 수 있지만 당신이 바깥 쪽을 다시 작성해야한다. std::vector<>은 멤버의 선형 저장 (즉, C- 배열과 호환 됨)을 보장하므로 내부 벡터에 대해 작동합니다.

+0

'target'에'std :: vector'를 사용하지 않는 이유는 무엇입니까? – avakar

+0

@avakar 올바른지, std :: vector를 target에 사용해야합니다. – mauve

+0

가장자리의 경우를 봅니다. 내부 벡터 중 하나라도 비어 있으면 '& * source [i] .begin()'에 정의되지 않은 동작이 있습니다. 그러나 함수가'float ** '을 취하기 때문에 직사각형 데이터를 기대하기 때문에 질문자가하는 일이 잘하면된다. –

관련 문제