주어진 std :: vector의 일부를 다른 "작은"std :: vector로 대체하는 (덮어 쓰는) 올바른 방법은 무엇일까요? 원본 벡터의 나머지 부분을 변경하지 않고 유지합니다. 또한 원래 벡터에 있었던 것을 귀찮게 할 필요가 없습니다. 더 작은 벡터를 더 이상 유지할 필요가 없습니다. std :: vector의 부분을 small std :: vector로 대체합니다.
내가이 있다고 가정 해 :std::vector<int> input = { 0, 0, 1, 1, 2, 22, 3, 33, 99 };
std::vector<int> a = { 1, 2, 3 };
std::vector<int> b = { 4, 5, 6, 7, 8 };
을 그리고 나는 그것을 달성하고자 :
input = { 1, 2, 3, 4, 5, 6, 7, 8, 99}
을 할 수있는 올바른 방법은 무엇입니까? I는 같을 것이다
input.replace(input.beginn(), input.beginn()+a.size(), a);
// 중간재 같은 것을 생각할 : 입력 = {1, 2, 3, 1, 2, 22, 3, 33, 99};
input.replace(input.beginn()+a.size(), input.beginn()+a.size()+b.size(), b);
표준 방법이 있어야하며 그렇지 않습니까? 이에 대한 내 생각은 지금까지 다음과 같습니다 :
는- 나는 표준을 사용할 수 없습니다 : 벡터 :: 지정은 입력의 모든 요소를 파괴하기위한
표준 : : 벡터 ::와 push_back을 대체 할 것이지만, 입력 확대 -> 내가 원하는 건 아니야
std :: vector :: insert는 새로운 요소를 만들고 입력 벡터를 확대하지만 벡터 a.size() + b.size() < = input.size()
- std :: vector :: swap은 작동하지 않습니다. 거기에 남아 있어야 할 입력의 일부 내용이 있습니다 (예를 들어 마지막 요소) 또한 그 방법으로 B를 추가 할 수 없다.
- std :: vector :: emplace 또한 input.size를 증가시킨다. 잘
또한 솔루션은 불필요한 지우기 또는 벡터 a 또는 b 값을 다시 작성하여 성능을 낭비하지 않는 것이 좋습니다. 내 벡터는 실제 크기로 매우 커질 것이며 결국 성능에 관한 것입니다.
유능한 도움이 필요하시면 대단히 감사하겠습니다.
['std :: copy'] (http://en.cppreference.com/w/cpp/algorithm/copy)를 찾으십니까? 귀하의 질문을 정확하게 이해한다면 (확실하지 않음) [this] (http://coliru.stacked-crooked.com/a/755867ac783ad0a7)가 귀하가 원하는 것이어야합니다. 그렇다면 알려주세요. 답변으로 게시하겠습니다. –
완전히 이해하지는 못했지만, 내가 겪은 것처럼 보입니다. OutputIt 사본 포함 (InputIt first, InputIt last, OutputIt d_first); 그것은 : 의 의미를 이해할 수 없다 : "d_first = input.beginn ( )"d_first는 복사해서는 안된다. 이 경우에는 [first, last) std :: copy_backward를 사용해야합니다. " – Simeon