Today Mini Learned :

기록하는 습관 들이기

TIPS - 내가 보려고 기록하는 팁!

[C++] 함수로 string을 전달할 때, pass by reference로 전달하는 법 (&를 사용하여 string을 값이 아닌 reference 형태로 보내기)

얌챠 2021. 4. 24. 21:54

백준 문제를 풀다가 메모리 초과가 발생했다.

이 문제를 풀면서, string의 끝에서부터 연산을 하면서 구한 값들을 그 역순(다시 string의 원래 순서대로)으로 출력할 일이 있었는데, 이때 별도의 공간에 저장하지 않고 풀기 위해서 재귀함수를 이용했었다.

사용한 재귀함수

하지만 문제를 제출한 뒤, 메모리 초과가 발생했다.


왜일까 생각해 보니 위의 재귀함수에서 string input_string부분이 눈이 갔다. 재귀함수를 사용하면서 문자열 길이가 조금이라도 길어진다면 재귀함수의 매 호출마다 그 긴 문자열을 복사해서 사용했기 때문에 메모리가 초과된 것이다.

나는 그래도 재귀함수를 사용하는 방법으로 문제를 풀고 싶어서 string을 (포인터 같이?) 매번 복사하는 것이 아닌 참조 자체를 보낼 수는 없을까 찾아보았다.

 


 

검색해보니 예상한 것과 같이, string은 매 함수 호출마다 복사해서 사용하는 것이 맞았다...!
하지만 &을 사용해 전달할 경우 string을 복사해서 사용하지 않는다고 한다. 따라서 아래와 같이 변경하고 제출해보니 성공!

앞으로도 string을 함수 인자로 사용한다면 굳이 메모리 낭비할 필요가 없으니 &를 사용해서 전달하면 좋을 것 같다ㅎㅎ

 

 

 

+ string& input_string을 사용한 것은, 값을 변경할 일이 없어서 그렇지만 만약 변경하는 것을 방지해야 한다면 함수의 앞에 const를 붙여 const string& input_string으로 사용하면 될 것 같다.

참고 : stackoverflow.com/questions/10231349/are-the-days-of-passing-const-stdstring-as-a-parameter-over