2015-01-26 5 views
1

STL 컨테이너의 삽입 메서드에는 삽입 할 위치를 나타내는 반복자와 삽입 할 값이있는 두 개의 인수가 사용됩니다. 삽입 메소드가 알고있는 것은 새로 삽입 된 값이 현재 반복자에 의해 참조 된 값 앞에 삽입된다는 것을 정의한다는 것입니다.C++ 벡터 및 삽입

대신 현재 값 뒤에 새 값을 삽입하도록 정의하는 것이 적절하지 않은 이유는 무엇입니까?

+1

내 생각에 'size_t'와 인덱스 0이 포함 된 것 같습니다. 0에서의 삽입은 vector iterator가 근본적으로 감싸 인 인덱스라고 가정하면 (기본 배열을 감안할 때), 'size_t'가 -1 (부호가없는)의 값을 취할 것을 요구합니다. 'std :: vector :: insert'를 "insert at ..."로 생각하면, 기능이 의미가 있습니다. – Conduit

+4

자신의 길인 경우, 목록의 시작 부분을 가리키는 값이 없으므로 위치 0에 삽입 할 수 없습니다. –

답변

0

새로 삽입 된 메서드는 반복기가 가리키는 위치에 있고, 다른 모든 것은 "다음 위치로 푸시됩니다". 현재 항목 과거를 넣으면

, 당신은 실제로 반복자에 삽입하고 +

+0

이렇게 생각하십시오. 내가 벡터에서 5 번째 항목을 만들라고 말하면 6 번째 권리를 얻지 못할 것입니다. –

0

전에 새로운 항목을 삽입 할 항목에 대한 반복자 포인트 1. 의미 상으로 새 항목의 위치를 ​​제공하고 있습니다.

대신에 항목이 삽입 된 경우 첫 번째 항목으로 벡터 시작 부분에 어떻게 삽입 할 수 있습니까?

현재 구성표를 사용하면 어디서나 항목을 삽입 할 수 있습니다. 그러나 제안 된 대안에서 특별한 경우없이 처음부터 삽입 할 수는 없습니다.

0
  1. 다음은 서면에 의해 시작 부분에 삽입을 수행 할 수 없을 것입니다 때문에 : 당신은 쉽게 의해 마지막에 삽입을 수행 할 수 없을 것입니다 때문에

    vect.insert(vect.begin(), value); 
    
  2. 평가로서 상기 작업을 새로운 값을 수행 한 후

    vect.insert(vect.end(), value); 
    

작문 (은/시작 단부 실제로 d 삽입 후, 코드가 말하는 것처럼 삽입 이전의 반복기는 무효화 될 수있다. insert을 다른 방법으로 정의한 경우 +1/-1을 사용해야합니다.