C++ 배열 형태의 vector 매개변수
조회수 5573회
#include <iostream>
#include <vector>
// Ascending order
void bubbleSort(std::vector<int> arr) { <--- !
int length = (int)arr.size();
int temp = 0;
for (int i = 0; i < length; ++i) {
for (int j = 0; j < length - (1 + i); ++j) {
if (arr[j] > arr[j + 1]) {
temp = arr[j + 1];
arr[j + 1] = arr[j];
arr[j] = temp;
}
}
}
}
int main() {
std::vector<int> inputArr = {5, 3, 1, 2, 7, 6, 4};
bubbleSort(inputArr);
for (int i : inputArr) {
std::cout << i << " ";
}
std::cout << "\n";
return 0;
}
이 코드를 실행해 보면, bubbleSort()
함수 내부에서는 arr 배열의 정렬이 잘 되는데 main()
함수에서는 정렬되지 않은 상태 그대로 나옵니다.
혹시 매개변수 arr이 inputArr과 동일한 벡터를 참조하는 게 아닌, 원소 값만 복사된 새 벡터를 할당받는 건가요?
자바에서는 이와 동일한 코드를 실행했을 때, 매개변수가 inputArr과 동일한 배열을 참조해서 별도의 함수 반환문이 필요가 없었는데...약간 헷갈리네요.
-
(•́ ✖ •̀)
알 수 없는 사용자
1 답변
-
정확히 진단하셨습니다.
JAVA, C#과 같은 언어에서는 기본적으로 변수가 참조로 동작하기 때문에 저렇게 작성해도 원하는 결과가 나옵니다.
그러나 C++에서는 저렇게 하면 복사(복사 생성자 호출)가 되기 때문에 참조로 받기 위해서 '&' 기호를 사용해야 합니다.// Ascending order void bubbleSort(std::vector<int>& arr) { int length = (int)arr.size(); int temp = 0; for (int i = 0; i < length; ++i) { for (int j = 0; j < length - (1 + i); ++j) { if (arr[j] > arr[j + 1]) { temp = arr[j + 1]; arr[j + 1] = arr[j]; arr[j] = temp; } } } }
-
(•́ ✖ •̀)
알 수 없는 사용자
-
댓글 입력