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 중국어 웹사이트의 기타 관련 기사를 참조하세요!