이 토론에서는 동일한 벡터에서 요소를 밀어내는 것과 관련된 잠재적 위험을 조사하고 탐색합니다.
잠재적 위험
다음 코드 조각을 고려하세요.
<code class="cpp">vector<int> v; v.push_back(1); v.push_back(v[0]);</code>
두 번째 push_back 작업은 벡터를 재할당할 수 있습니다. 첫 번째 요소에 대한 참조를 무효화합니다. 따라서 이 접근 방식은 일반적으로 안전하지 않은 것으로 간주됩니다.
안전한 접근 방식
이러한 작업의 안전을 보장하기 위해 예약 방법을 사용하여 사전에 충분한 공간을 할당할 수 있습니다.
<code class="cpp">vector<int> v; v.push_back(1); v.reserve(v.size() + 1); v.push_back(v[0]);</code>
표준 적합성
위에 설명된 동작은 C 표준(또는 유사한 문제)에서 해결되었습니다.
1) Parameters taken by const reference can be changed during execution of the function Examples: Given std::vector v: v.insert(v.begin(), v[2]); v[2] can be changed by moving elements of vector
하지만 이 문제는 내용이 수정되더라도 기능을 보장하는 것은 벡터의 책임이므로 결함으로 간주되지 않습니다.
위 내용은 동일한 벡터에서 요소를 푸시할 때 원본 참조에 의존하는 것이 안전합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!