나는 (그렇게 추한 보이는 이유는 묻지 마세요) 같은 C++ 코드를 가지고있다 - 당신이 생각해야 할 그 때문에 코드의 자세한 부분은 정말 의미)이 있습니다STL 세트의 삽입 메소드가 전달 된 객체의 값을 복사합니까?
IntSet temp;
SuperSet superSet;
for (uint i = 0; i < noItems; i++) {
temp.insert(i);
superSet.insert(temp);
temp.clear();
}
를이 noItems
개의 정수 집합 (각각 하나의 정수 값을 포함하는 IntSet
)을 준비하고 다른 집합 (SuperSet
)에 삽입하기위한 것입니다. 다음과 같이 두 세트가 정의되어 의도 한대로
typedef unsigned int DataType;
typedef std::set<DataType> IntSet;
typedef std::set<IntSet> SuperSet;
이 나를 위해,이 코드가 작동하지해야하기 때문에 단지 삽입 후 나는 temp
을 삭제하고있어, 나는 insert
는 참조로 점점 것을 발견 temp
superSet
에 인수 : 코드의 결과는 위의 제시된 pair<iterator,bool> insert (const value_type& x);
(http://www.cplusplus.com/reference/stl/set/insert/는)
그래서, 나는 SuperSet
만 포함 IntSet
년대를 삭제 받아야합니다. 하지만 "불행히도"이 코드는 작동합니다 - 모든 IntSet
은 적절한 값으로 채워져 있습니다 ... 그래서 제 질문은 - STL 세트의 삽입 방법은 실제로 본체에서 무엇을합니까? 그것은 단순히 참조로 전달 된 개체를 복사합니까? 그리고 객체 나 원시 타입을 넘기는 것 사이의이 메소드의 동작의 차이점은 무엇입니까?
답장을 보내 주셔서 감사합니다.
"* 단순히 전달 된 개체를 참조로 복사합니까? *"예. "* 객체 또는 기본 유형을 전달할 때이 메소드의 동작이 다른 점은 무엇입니까? *"오버 헤드가 적습니다. – ildjarn