원시 데이터에 std :: vector 포인터를 얻는 방법?
내가 사용하려고 해요 std::vector
A와 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
.
&something
std::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
'IT' 카테고리의 다른 글
런타임시 유형의 기본값 (0) | 2020.06.13 |
---|---|
vim에서 특정 캐릭터로 점프하는 방법은 무엇입니까? (0) | 2020.06.13 |
pip를 사용하여 여러 파이썬 패키지를 한 번에 설치하는 방법 (0) | 2020.06.13 |
num ++가 'int num'의 원자가 될 수 있습니까? (0) | 2020.06.13 |
ImageView-높이가 너비와 일치합니까? (0) | 2020.06.13 |