2013-11-01 2 views
5

vector (list 및 기타 컨테이너와 마찬가지로)에는 멤버 함수 (MF) assign이 있습니다. 할당 연산자와 assign MF (범위 버전)를 비교하고 싶습니다.STL - 할당 연산자 대 할당 멤버 함수

  1. 하나는 벡터 (아니 처음부터 끝까지)의 하위 범위를 할당하고 싶어 :

    는 지금까지 내가 이해가 될 때 assign를 사용하는 것이 유용합니다.

  2. 할당은 배열에서 수행됩니다.

다른 경우에는 assign MF에는 단점이 없으며 할당 연산자를 사용할 수 있습니다. 맞습니까? assign MF를 사용하는 다른 이유가 있습니까?

+2

할당을위한 또 다른 * pro *는 이동 ​​할당 연산자입니다. 값을 지정하면 복사 된 값 대신 이동됩니다. – jrok

+1

'할당하다'라는 작은 표현은 단지 다른 사람이 코드를 읽는 데있어 직관적 인 것보다 약간 직관적이지 않다는 것입니다.하지만 그것은 작은 문제입니다. –

답변

7

assign을 사용하는 주된 이유는 특정 유형의 컨테이너에서 다른 유형의 컨테이너로 데이터를 복사하는 것입니다.

예를 들어 std::set<int>의 내용을 std::vector<int>으로 마이그레이션하려는 경우 할당 연산자를 사용할 수 없지만 vector.assign(set.begin(), set.end())을 사용할 수 있습니다.

다른 예는 서로 변환 가능한 다른 유형의 컨테이너 두 개를 복사하는 것입니다. std::vector<Derived*>std::vector<Base*>에 할당하려고하면 할당 연산자가 충분하지 않습니다.

+0

여전히'vector = std :: vector (set.begin(), set.end())'등을 할 수 있기 때문에'assign'은 완전히 중복됩니다. – emlai

+0

@emlai'assign'는 완전히 새로운 벡터를 할당하는 대신에 용량을 재사용하고자 할 때 유용합니다. – TemplateRex