2016-10-14 4 views
1

매개 변수로 배열을 전달하면 기본적으로 배열의 주소를 인덱스 0으로 전달합니다. 그런 다음 하드웨어는 int가 일반적으로 4 바이트임을 알고 있으므로 다른 요소에 쉽게 액세스 할 수 있습니다. 제 질문은 벡터에 관한 것입니다. 나는 그런 기능벡터에 대한 참조를 매개 변수로 전달

void bla(std::vector<int> &arr) 
    { 
    } 

이있는 경우는 벡터에 대한 참조를 통과해야하지만 배열과 마찬가지로 발생합니까? 벡터는 배열을 사용하여 구현되므로 참조를 전달하면 첫 번째 요소의 주소 만 전달됩니다. 맞습니까?

또한 벡터로 전달하면 어떻게됩니까? 스택에 사본을 만들 수 있습니까? 감사합니다

답변

0

:

  • void foo(Bar b)는 - 값으로 전달 b 사본 또는 일본어 Bar이다.
  • void foo(Bar& b) - 참조로 전달하면 Bar에서 b까지 원본을 수정할 수 있습니다.
  • void foo(Bar* b) - 포인터로 전달하면 b이 null이 아닌 한 Bar에서 b까지 원본을 수정할 수 있습니다.
  • void foo(const Bar& b) - b은 원래 Bar이지만 foo의 범위에서 수정할 수 없습니다.
  • void foo(const Bar* b) - 포인터를 const로 전달하면 b은 원래 Bar에 대한 포인터이지만 foo의 범위에서 수정할 수 없습니다.
  • void foo(Bar* const b) - const를 포인터로 전달 b 원래 Bar에 대한 포인터이며, (b가 null이 아닌만큼) 원래 Bar 수정할 수 있습니다,하지만 당신은 무엇을 b 포인트를 변경할 수 없습니다.
  • void foo(const Bar* const b) - const 포인터를 const로 전달하면 원래 Bar을 변경할 수 없으며 이 가리키는 범위를 foo으로 변경할 수 없습니다.
0

참조로 벡터를 전달하면 전체 배열이 전달되고 편집 할 수 있습니다. 첫 번째 요소의 주소를 전달하지 않습니다. 그렇지 않으면 참조로 전달하지 않으면 배열 복사본 만 만듭니다.

출처 : 학교 코딩 경험 (정확하지 않은 경우 편집하십시오).

5

std::vector은 원시 C 스타일 배열보다 더 매우 다른 , 그래서 당신이 참조 아무도하여 std::vector을 통과하면 std::vector의 첫 번째 항목의 주소가 함수에 전달되는 것을 말할 수 있습니다.

std::vector에는 "원시 C 스타일 배열"이상의 논리가 있습니다.

벡터의 첫 번째 항목의 주소를 원할 경우 &v[0] 또는 v.data()을 사용하여 가져올 수 있습니다.

값으로 벡터를 전달하면 원래 벡터의 복사본이 생성됩니다. 그리고 귀하의 기능 내에서 해당 사본을 수정하면 이 아니라이 원본에 반영됩니다. 일반적

+0

좋아요, 벡터를 참조로 전달하면 일부 주소를 전달하면 하드웨어가 어떻게하면 하나의 주소 만 사용하여 벡터를 얻을 수 있습니까? – Andrey