벡터 Push_Back 및 참조 유효성
push_back을 사용하여 벡터에 요소를 삽입할 때 기존 요소에 대한 참조에 대한 잠재적인 영향을 고려하는 것이 중요합니다. . 여기서는 특정 조건에서 push_back의 안전성을 조사합니다.
다음 예를 고려하십시오.
<code class="cpp">vector<int> v; v.push_back(1); v.push_back(v[0]);</code>
이 경우 두 번째 push_back이 재할당을 트리거하면 v[0]의 주소가 벡터 이동으로 인해 무효가 됩니다. 이는 잠재적인 안전 문제를 야기합니다.
이를 완화하기 위해 예약을 사용할 수 있습니다.
<code class="cpp">vector<int> v; v.push_back(1); v.reserve(v.size() + 1); v.push_back(v[0]);</code>
이 수정된 코드에서 예약은 할당된 메모리가 새 요소를 수용하기에 충분하도록 보장합니다. 재할당 없이 참조의 유효성을 보존합니다.
C 표준이 이와 유사한 우려를 잠재적인 결함으로 처리했다는 점은 주목할 가치가 있습니다. 그러나 결의안에서는 이러한 작업이 허용되는 동작이라고 결론지었습니다.
v.insert(v.begin(), v[2]);
표준에서는 이러한 작업의 성공을 암묵적으로 허용하여 벡터가 대규모 컬렉션을 관리하고 조작하기 위한 신뢰할 수 있는 데이터 구조로 유지되도록 보장한다는 근거가 있습니다.
위 내용은 벡터 Push_Back은 요소 참조에 안전합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!