c++20 간결하게 코드쓰기(1)

2024. 10. 19. 22:08·C++/기초
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
'C++/기초' 카테고리의 다른 글
  • Modern C++ Thread 간결하게 사용하기
교쟁이
교쟁이
  • 교쟁이
    Just Do it!!!
    교쟁이
  • 전체
    오늘
    어제
    • 분류 전체보기 (29)
      • C++ (2)
        • 자료구조 (0)
        • CMake (0)
        • 기초 (2)
        • 네트워크 (4)
      • 항해99 (15)
        • WIL (4)
      • Back-end (3)
        • DATABASE (3)
      • 글쓰기 (2)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    파이널 프로젝트
    스타트업
    sql #database
    항해 플러스 # CI/CD #Terraform
    Jest
    개발자
    항해99 #nodejs
    부트캠프
    비전공자
    동생
    항해99
    socket
    TCP/IP
    항해 플러스 #테라폼
    database
    자바스크립트
    코드스테이츠
    programming
    네카라쿠배
    테스트
    신입개발자
    항해 플러스
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
교쟁이
c++20 간결하게 코드쓰기(1)
상단으로

티스토리툴바