struct OddAndEvens { std::vector<int> odds, evens; };
OddAndEvens separateOddsAndEvens(const std::vector<int>& arr) {
std::vector<int> odds, evens;
for (int i : arr) {
i % 2 == 1
? odds.emplace_back(i)
: evens.emplace_back(i);
}
return OddAndEvens{ .odds = odds,.evens = evens };
}
int main(){
std::vector<int> vecUnSplit{ 1,2,3,4,5,6,7,8,9,10 };
auto oddAndEvens{ separateOddsAndEvens(vecUnSplit) };
auto [odds, evens] = oddAndEvens;
for (auto& i : odds) {
std::cout << i << std::endl;
}
std::cout << "============" << std::endl;
for (auto& i : evens) {
std::cout << i << std::endl;
}
}
마치 최신언어에서 사용하는 것 처럼 c++에서도 작성할수 있다.
1. 객체를 간단하게 선언하여 객체 return이 수월하다.
이렇게 작성한 이유는 object가 로컬 변수이거나, 함수에 대한 매개변수거나 임시값일때 리턴값 최적화(RVO)가 적용되기 때문이다. 또한 object가 로컬 변수라면 이름있는 리턴값 최적값 (NRVO)가 적용된다. 두개 모두 복사없이 객체를 리턴한다.
2. 이 함수를 사용하는 입장에서 구조적 바인등을 사용할 수 있기때문에 원하는 객체의 속성만 사용할수 있다.
auto [odds, evens] = oddAndEvens; <- 구조적 바인딩
'C++ > 기초' 카테고리의 다른 글
Modern C++ Thread 간결하게 사용하기 (0) | 2024.11.01 |
---|