>백엔드 개발 >C++ >std::Vector에서 원시 데이터 포인터를 얻는 방법은 무엇입니까?

std::Vector에서 원시 데이터 포인터를 얻는 방법은 무엇입니까?

Barbara Streisand
Barbara Streisand원래의
2024-11-12 08:39:02709검색

How to Get a Raw Data Pointer from a std::vector?

std::Vector 원시 데이터 포인터 검색

프로그래밍에서는 원시 포인터가 필요한 함수에 데이터를 전달해야 하는 경우가 많습니다. 데이터 그 자체. 이 작업은 std::Vector와 같은 동적 컨테이너로 작업할 때 어려울 수 있습니다.

const void 포인터를 입력으로 사용하는 process_data() 함수가 있는 시나리오를 생각해 보세요. 이전에는 단순히 참조로 char 배열을 전달할 수 있었습니다.

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

그러나 이 논리를 std::벡터를 사용하도록 변환할 때 벡터를 직접 전달하려고 시도합니다.

vector<char> something;
process_data(something);

또는 시작 반복자의 주소를 취하는 경우:

process_data(&something.begin());

무의미한 데이터 또는 컴파일러 경고가 발생합니다.

문제는 표준 내의 실제 데이터에 대한 포인터를 얻는 데 있습니다. ::벡터. 이를 위해 다음과 같은 몇 가지 옵션을 사용할 수 있습니다.

1. 첫 번째 요소에 액세스:

벡터에서 첫 번째 요소의 주소를 검색할 수 있습니다.

process_data(&something[0]); // or &something.front()

2. data() 멤버 함수 사용(C 11 이상):

C 11에서 std::Vector는 data() 멤버 함수를 도입했습니다.

process_data(something.data());

이 함수 벡터가 비어 있는 경우에도 호출하는 것이 안전하므로 선호됩니다.

참고: &something은 데이터가 아닌 벡터 개체 자체의 주소를 제공합니다. 따라서 이러한 목적으로 사용해서는 안됩니다.

위 내용은 std::Vector에서 원시 데이터 포인터를 얻는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.