벡터를 복사하려고 할 때 어떤 함수를 쓸 수 있을까요?

 


 벡터 v에 있는 내용을 그대로 u에 복사해 보겠습니다. 생성자를 이용한 방법 먼저 생각해 볼 수 있습니다.

 

 이 문서에 나온 방법 중 하나를 써 보았습니다. 벡터 v 전체를 넘겼는데요. 이것은 v 전체를 u에 복사한다는 의미입니다. 문서에 따르면 이것을 copy constructor라고 합니다.

 

 

 제대로 복사가 되었음을 알 수 있습니다. 문제는, 생성자는 새로운 벡터를 생성하는 것입니다. 생성과 복사는 미묘하게 다릅니다. 기존의 벡터에다가 다른 벡터에 저장이 되어 있는 값들을 복사할 수는 없을까요? 이 때 쓸 수 있는 것은, algorithm 헤더에 있는 copy 메서드입니다.

 

 문서에 따르면, 아래와 같이 쓸 수 있다고 합니다.

 

 


 예제를 2개만 해 보도록 하겠습니다. 보통 저는 copy를 ps에서 써 본적이 거의 없고, 썼다고 하더라도 벡터나, array에서만 썼으니, 그 경우만 보도록 하겠습니다.

 

 

 벡터 2개가 있습니다.

 

 

 v에서 파란색으로 칠한 부분을 u에 파란색으로 칠한 부분으로 옮기려고 합니다. 그러면 원본은 v.begin()부터, v.end()가 될 겁니다. 복사를 받을 부분은, 2부터 4까지입니다. 시작 부분이 u.begin() + 2입니다. 따라서, 아래와 같이 작성하시면 됩니다.

 

 

 14번째에 있는 copy만 보세요. 실행 결과는 아래와 같습니다.

 

 

  정확하게 의도에 맞게 복사되었음을 알 수 있습니다. 반대로, 30에서부터 31까지, u의 3번째 위치부터 복사하려고 한다면 어떻게 하면 될까요?

 

 

 그림으로 그려보면 위와 같은데요. 복사할 부분은 v.begin()부터, v.begin()+1임을 알 수 있습니다. 그런데, 문서에서 보면 [first, last)를 복사한다고 되어 있으므로, 인자로 넣어야 할 것은, v.begin(), v.begin()+2가 됩니다. last 값이 v.begin()+2가 되는 셈입니다. 이걸 어디에 복사하면 되나요? u.begin()+3부터 2개요.

 

 

 14번째 copy만 보시면 됩니다.

 

 

 실행 결과는 위와 같습니다. 의도한 대로 제대로 동작함을 알 수 있습니다.

 

 


 여기서 보너스 . string에서 특정한 구간을 다른 문자열로 대치하는 연산은 ps에서도 자주 써먹는 편입니다.  이 연산도 copy를 이용하면 꽤나 간단하게 할 수 있습니다. 저는 s의 "chogahui05"에서 05를 06으로 대치시키고 싶습니다.

 

 

 그러면, 단순히 요렇게 써 주면 됩니다.

 

 

 실행 결과는 위와 같습니다.