Cpp 함수 파라미터로 배열 리턴하려면 어떤 자료형이 좋을까요?

jys923의 이미지

Cpp 함수 파라미터로 배열 리턴하려면 어떤 자료형이 좋을까요?

int fun(int a,int * b){
*b = 13;
}

이런식으로 해서 b도 output 파라미터로 종종 쓰잖아요.

근데 output 파라미터를 배열로 쓰고 싶습니다.
output 배열 크기가 정해져있지 않습니다.

vector 포인터를 쓰는 게 좋을까요?

세벌의 이미지

익명 사용자의 이미지

output 배열 크기가 정해져 있지 않다는 것은, fun 함수를 호출하는 입장에서는 fun 함수가 몇 개의 객체를 돌려줄지 알 수 없다는 뜻인가요?

그렇다면 std::vector가 답입니다. array는 그게 C-style 고전적 배열이든 std::array이든 컴파일 타임에 원소 갯수가 정해져 있어야 합니다.

사실은 꼭 std::vector일 필요도 없는데, random access가 꼭 필요하지 않고 fun 함수 자체도 몇 개의 개체를 반환할지 다 헤아려보기 전까지는 알 수 없는 경우엔 std::list도 괜찮은 선택이지요.

그 밖에, fun 함수 자체의 인터페이스를 어떻게 설계할지도 수많은 방법들이 있습니다.

1. 파라미터로 vector *를 받은 뒤 채워서 반환하거나
2. 파라미터로 vector &를 받은 뒤 채워서 반환하거나
3. 파라미터로 back_inserter를 받은 뒤 채워서 반환하거나 (가장 generic한 듯.)
4. vector 객체를 내부에서 만든 뒤 값으로 반환하거나 (move semantic 정말 좋습니다.)

기타 등등. 심지어 하나 이상의 인터페이스를 만드는 방법도 있지요. (overloading)