2012-02-24 4 views

답변

2

vector 사본? 생성자는 벡터의 내부 저장소에 포인터를 복사하는 것이 아니라 복사본의 다른 벡터 내용을으로 만듭니다 (포인터를 복사 한 경우 한 벡터에 대한 변경 사항은 다른 벡터에 반영됩니다. 알다시피, 그것은 vector 클래스가 동작하는 방식이 아닙니다.)

또한, 벡터의 내부 저장 장치의 끝을 나타내는 특별한 것. 벡터의 끝을 감지하려면 size 함수를 사용하여 벡터에 허용되는 최대 인덱스를 결정하거나 반복자를 end에 의해 반환 된 것과 비교하십시오. 당신이 거기에 물건을 올려 놓지 않으면, 또는 당신의 도서관 문서가 당신에게 그것을 기대한다고 말하지 않으면, 감시 가치를 찾지 마십시오.

0

아마 당신은 std::vector<T>의 생성자에 대해 이야기하고 있습니다. 그것은 복사 생성자이며 배열의 주소가 아니라 다른 벡터에 대한 const 참조를 취합니다. 그 다른 벡터의 공급자는 종료 null을 추가 할 필요가 없습니다.

std::vector<int> mine; 
std::vector<int> theirs(mine); // no particular change required for mine 
+1

"implementation-defined"는 C++ 표준의 전문 용어입니다. 즉, 구현을 준수하면 어떤 선택을했는지 문서화해야합니다. 기본적으로 구현 된 요소를 벡터 끝에서 벗어나지 못하도록하는 표준은 없습니다 ('T'도 기본 구성 가능하다고 가정합니다 - "null 종결 자"는 일반적으로 사용자 정의 유형을 의미합니까?).), 구현시에는 그렇지 않다는 경고가 반드시 필요하지는 않습니다. –

+0

좋습니다. 구현이 각 벡터의 end() 반복자를 지나서 꽃을 그리지 만 어디에서나 그것을 언급 할 필요는 없다는 용어는 무엇입니까? – wilhelmtell

+0

"지정되지 않음"은 구현이 허용 가능한 동작 범위를 설정했지만 구현이 일관되게 동작하거나 동작을 문서화 할 필요가 없음을 의미합니다 (원하는 경우 매번 다른 선택을 할 수 있음) . 예를 들어, 함수 인수의 평가 순서는 지정되지 않습니다. 이런 식으로, 저는 표준이 꽃을 그리기위한 구현이 아닌 *라고 평소에 말하고 있다고 생각합니다. 그런 것들을 불특정이라고 부르는 것이 합리적이라고 생각합니다.하지만 그것은 명시되지 않은 것에 대한 명시적인 진술보다는 암묵적입니다. –