2010-04-15 1 views
0

누가 MSDN의 operator = vector에 대한 링크를 줄 수 있습니까?누가 MSDN의 vector = of 연산자에 대한 링크를 줄 수 있습니까?

연산자 [] 만 찾을 수있는 이유는 무엇입니까?

operator =가 A ~ B의 모든 내용을 복사하는 것처럼 기본값 인 경우 다음 코드가 어떻게 작동합니까?

vector<double> v(100,1); 
v = vector<double>(200,2); // if operator= is just a trivail version, how to make sure the old v get cleared? 
+1

왜 검색하지 않으시겠습니까? 그것은 "operator []"와 함께 "벡터 연산자"아래 나열되어 있습니다. http://msdn.microsoft.com/en-us/library/dd673471(v=VS.100).aspx –

+0

방금이 질문을 한 것입니다. 왜 당신은 당신의 오래된 질문을 편집하고 이것에 태그를 붙이지 않습니까? 또한 다른 질문에 남긴 의견을 참조하십시오. 당신은 너무 많이 걱정하고 있습니다. 그것은 모든 것을 깨끗하게 할거야, 나는 약속한다. 나는 중복으로 투표를하고 있습니다. – GManNickG

+0

어서! 내가 이것을 묻는 이유는 MSDN에 벡터에 대한 operator =가 없기 때문에 나 혼란 스럽습니다. – 8888q8888

답변

3

std::vector는 STL의 일부이기 때문에 std::vector의 설명을 할 것입니다. 기본 구현은 약간 다를 수 있지만 STL의 모든 준수 버전은 std::vector에 대해 동일한 인터페이스와 동일한 보장을 제공해야합니다. 나는 빨리 MSDN에에서 찾을 수없는, 그러나 여기 operator=의이 같은 설명은 다음과 같습니다

  1. http://www.cplusplus.com/reference/stl/vector/operator=/
  2. http://www.sgi.com/tech/stl/Vector.html

지금, 당신의 질문의 두 번째 부분은 저를 퍼즐. "A부터 B로 모든 것을 복사"하지 않으면 벡터에서 operator=을 어떻게 처리 할 수 ​​있습니까?

예에서 질문은 "오래된 v가 지워지는 것을 확인하는 방법"이었습니다. 나는 이것을 두 가지 방법 중 하나로 해석 할 수 있습니다 : "v = vector<double>(200,2)v의 내용을 덮어 쓰지 않고 추가하지 않는다는 것을 어떻게 알 수 있습니까?". 그 대답은 그것이 이 STL 컨테이너에서 어떻게 작동하는지에 대한 정의이기 때문에 그것을 알고 있다는 것입니다. 모든 표준 준수 구현은 이러한 방식으로 작동하도록 보장됩니다.

v = vector<double>(200,2)을 사용하여 덮어 쓸 때 v의 내용은 어떻게됩니까? 대답은 할당이 해제되어 있고 객체 인 경우 소멸자가 호출된다는 것입니다. 벡터에 포인터가 개체에 포함되어있는 경우 포인터 자체의 할당이 해제되지만 은 아니며이 가리키는 포인터와 구분되는 중요한 차이점에 유의하십시오.

귀하의 질문에 대한 답변을 얻지 못했다면 문제를 해결하십시오.

+0

내 질문은 두 번째 해석과 더 비슷합니다. "대답은 할당 취소 된 것입니다."하지만 이전 A.member를 명시 적으로 할당 해제하지 않고 연산자가 B.member의 모든 멤버를 A.member에 복사하는 경우에는 어떻게됩니까? – 8888q8888

+0

@ 8888 : 누가 모든 회원을 복사하겠습니까? 이 무효 연산자 = (벡터 & B)는 에서 { 삭제 요소가 에 B에서 복사 요소의 크기를 조정 : – GManNickG

+0

그럼, 내가 말하고있는 것은이 = 특별한 연산자가 될 벡터에 대한 다음과 같은 일을해야한다는 것입니다 } – 8888q8888