IT

원시 데이터에 std :: vector 포인터를 얻는 방법?

lottoking 2020. 6. 13. 09:35
반응형

원시 데이터에 std :: vector 포인터를 얻는 방법?


내가 사용하려고 해요 std::vectorA와 char배열입니다.

내 함수는 void 포인터를 사용합니다.

void process_data(const void *data);

이 코드를 사용하기 전에 :

char something[] = "my data here";
process_data(something);

예상대로 작동했습니다.

그러나 이제의 동 적성이 필요 std::vector하므로 대신이 코드를 사용해보십시오.

vector<char> something;
*cut*
process_data(something);

문제는 char 벡터를 내 함수에 어떻게 전달하여 벡터 원시 데이터에 액세스 할 수 있습니까 (어떤 형식이든-부동 소수점 등)?

나는 이것을 시도했다 :

process_data(&something);

이:

process_data(&something.begin());

그러나 그것은 횡설수설 한 데이터에 대한 포인터를 반환했고 후자는 경고를 주었다 warning C4238: nonstandard extension used : class rvalue used as lvalue.


&somethingstd::vector보유하고있는 데이터의 주소가 아니라 객체 의 주소를 제공합니다 . 컴파일러가 &something.begin()반환하는 반복자의 주소를 제공합니다 begin()(컴파일러가 경고 하듯이 something.begin()rvalue 표현식 때문에 기술적으로 허용 되지 않으므로 주소를 가져올 수 없습니다).

컨테이너에 하나 이상의 요소가 있다고 가정하면 컨테이너의 초기 요소 주소를 가져와야합니다.

  • &something[0]또는 &something.front()(인덱스 0의 요소 주소) 또는

  • &*something.begin()(에 의해 리턴 된 반복자가 가리키는 요소의 주소 begin()).

C ++ 11, 새로운 멤버 함수에 첨가 하였다 std::vector: data(). 이 멤버 함수는 컨테이너에서와 같이 초기 요소의 주소를 반환합니다 &something.front(). 이 멤버 함수의 장점은 컨테이너가 비어 있어도 호출해도된다는 것입니다.


something.data() 벡터의 데이터 공간에 대한 포인터를 반환합니다.


첫 번째 요소에 대한 포인터를 대신 사용하십시오.

process_data (&something [0]);

참고 URL : https://stackoverflow.com/questions/6485496/how-to-get-stdvector-pointer-to-the-raw-data

반응형