이 방법을 사용하여 컨테이너에서 컨테이너로 일부 변경 사항이있는 데이터를 복사했습니다.
std::vector<Tsrc> source{Tsrc(),Tsrc(2),Tsrc(3),Tsrc(4)};
std::vector<Tdst> dst(source.size());
std::transform(begin(source),end(source),begin(dst),[](Tsrc& item){
return do_something(item);
}
우선, 이전 코드가 표준이고 깨끗한가요? 어떤 향상이 적용될 수 있습니까?
둘째, 이제 동일한 작업을 수행하고 싶지만 Tdst
기본 생성자가없는 경우에 대해 수행합니다 . 따라서 위의 코드는 작동하지 않습니다. 나는 그것을 다음으로 대체했습니다.
std::vector<Tsrc> source{Tsrc(),Tsrc(2),Tsrc(3),Tsrc(4)};
std::vector<Tdst> dst;
dst.reserve(source.size());
for(auto& item:dst){
dst.emplace_back(do_something(item));
}
그것을하는 올바른 방법입니까? 어떤 충고?
당신이하는 일은 괜찮아 보입니다. 를 사용하여 명시 적 루프를 피할 수 있습니다 std::back_inserter
. 또한 원래 범위의 요소가 수정되지 않았으므로 람다의 매개 변수를 만들어야합니다 const
.
dst.reserve(source.size());
std::transform(begin(source), end(source), back_inserter(dst),
[](const Tsrc& item){return do_something(item);});
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다