>  기사  >  백엔드 개발  >  동일한 벡터에서 요소를 푸시할 때 원본 참조에 의존하는 것이 안전합니까?

동일한 벡터에서 요소를 푸시할 때 원본 참조에 의존하는 것이 안전합니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-10-24 10:33:30983검색

When Pushing Elements from the Same Vector, Is it Safe to Rely on the Original Reference?

동일 벡터에서 요소 밀어내기: 주의 사항

이 토론에서는 동일한 벡터에서 요소를 밀어내는 것과 관련된 잠재적 위험을 조사하고 탐색합니다.

잠재적 위험

다음 코드 조각을 고려하세요.

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

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