> 백엔드 개발 > C++ > STL 벡터는 요소를 메모리에 연속적으로 저장하도록 보장됩니까?

STL 벡터는 요소를 메모리에 연속적으로 저장하도록 보장됩니까?

DDD
풀어 주다: 2024-11-25 10:21:11
원래의
630명이 탐색했습니다.

Are STL Vectors Guaranteed to Store Elements Contiguously in Memory?

STL 벡터의 연속 저장 보장

C에서 STL 벡터는 요소가 추가되거나 제거될 때 자동으로 크기가 조정되는 동적 배열을 제공합니다. 그러나 한 가지 일반적인 질문이 제기됩니다. 벡터의 요소가 항상 메모리에 연속적으로 저장된다고 가정해도 안전합니까?

이 문제를 해결하려면 다음 시나리오를 고려하십시오.

vector<char> vc(100);
// Perform operations on vc
vc.resize(200);
char* p = &vc[0];
// Conduct operations using *p
로그인 후 복사

질문 즉, 크기를 조정한 후 첫 번째 요소(*p)의 주소를 사용하여 메모리의 나머지 벡터 요소에 순차적으로 안정적으로 액세스할 수 있습니까? 벡터?

답변: 예, 그 가정은 유효합니다.

C 03 표준(23.2.4.1)에 따르면 벡터에 대한 연속 저장이 보장됩니다.

"벡터의 요소는 연속적으로 저장됩니다. 즉, v가 벡터이고 T가 다른 유형인 경우 bool보다 모든 0 <= n < v.size()에 대해 &v[n] == &v[0] n 항등식을 따릅니다."

이는 후속 요소의 메모리 주소를 의미합니다. 벡터의 첫 번째 요소 주소를 요소 유형의 크기만큼 증가시켜 계산할 수 있습니다. 즉, 요소는 선형 방식으로 저장됩니다.

중요 사항:

연속 저장이 보장되지만 벡터에는 다음과 같은 저장이 필요할 수 있다는 점을 기억하는 것이 중요합니다. 추가 작업 중에 재할당되므로 포인터와 반복자가 무효화될 수 있습니다. 따라서 벡터 요소에 대한 포인터로 작업할 때 이러한 가능성을 고려하는 것이 중요합니다.

위 내용은 STL 벡터는 요소를 메모리에 연속적으로 저장하도록 보장됩니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿