2010-08-19 6 views
3

char *mem = malloc(...) 대신 std::vector<char>을 사용하도록 코드를 옮겼으나 지금은 operator []을 통해서만 벡터 데이터에 액세스 할 수 있지만 포인터는 사용하지 못하는 문제에 직면하고 있습니다. 이 포인터를 통해 vector의 데이터에 액세스하는 것은 여전히 ​​가능하다면포인터를 연속 메모리 조각을 std :: vector에서 얻을 수 있습니까? <char> C++에서?

char *data = malloc(100); 
fill_data2(data); 
char *ptr = data; 

모든 아이디어 :이 할 수있는 전에

std::vector<char> data; 
fill_data(data); 
char *ptr = data; 

:

내가 좋아하는 물건을 쓸 수 없습니다?

감사합니다. Boda Cydo.

답변

8

벡터 데이터에 접근하기위한 표준적인 방법은 물론

&data[0] 
+4

미래에는 C++ 0x가 약간 더 명시 적으로 이것을하기 위해'data()'멤버를 추가 할 것입니다. –

+4

그러나 벡터의 재 할당을 조심하십시오. –

+0

C++ 표준은 메모리가 연속 블록에 저장되도록 보장합니까? ** 편집 ** : 예, 허브 셔터 기사를 참조하십시오. – Philipp

2

을 사용하는 것입니다. 벡터는이 목적을 위해 설계되었습니다 :

char * p = &(myVector[0]) ; 

그리고 지금, P 점을 벡터의 첫 번째 항목에, 당신은 C.

에서
+1

@bodacydo 그리고 더 많은 통찰력을 줄 수있는 것 : http://herbsutter.com/2008/04/07/cringe-not-vectors-are-guaranteed-to-be-contiguous/ – celavek

0

를하는 것처럼 당신은 포인터로 재생하여 각 항목에 액세스 할 수 있습니다 이 코드를 완벽하게 합법적으로 작성할 수 있습니다. fill_data를 변경하면 std::vector<T>&이됩니다. 물론 이것이 외부 C API 인 경우 문제에 대한 선택의 여지가 많지 않습니다.

관련 문제