저는 STL 라이브러리로 작업하고 있으며 데이터 재 할당의 경우를 최소화하는 것을 목표로하고 있습니다. 내가 wndering했다 는 크기가 변경되지 않은 경우std :: vector :: assign - 데이터를 다시 할당 하시겠습니까?
데이터를 재 할당을 수행하거나 실제로 단지를 지정한다 않습니다 새로운 값 (예 : operator =) 사용? http://www.cplusplus.com/에서표준 : : 벡터 :: 할당 (말하자면 size_type n을, CONST VALUE_TYPE & 발)
STL과 문서
은 (C++ 98) 다음 SAIS : 충전 판 (2)에서새로운 콘텐츠 브로 사본 초기화 요소 각각은 N이다. 재 할당이 발생하면 필요한 기억 장치가 내부 할당자를 사용하여 할당됩니다.
호출하기 전에 컨테이너에 보관 된 요소는 모두 삭제되고 새로 생성 된 요소로 대체됩니다 (요소 할당이 수행되지 않음). 새로운 벡터 크기가 현재 벡터 용량을 초과하는 경우에만 할당 된 저장소 공간을 자동으로 다시 할당합니다.
"요소가 지정되지 않았습니다"라는 문구는 모두 약간 혼란 스럽습니다.
예를 들어 OpenCV의 cv :: Vec3i와 같은 클래스의 벡터가 필요합니다.
- cv :: Vec3i의 소멸자 또는 생성자가 호출됩니까?
- Vec3i 메모리의 직접 복사가 만들어지고 벡터가 채워 집니까?
- 내 클래스가 런타임에 메모리를 할당 할 경우 operator? 이 메모리는 일반 메모리 복사로 처리 할 수 없습니다. assign()을 객체에 사용해서는 안된다는 뜻입니까?
편집 :이 경우 지정 사용의 전체 목적은 0 벡터의 모든 값을 설정하는 것입니다 (경우에 나는 성병 한 : 벡터에게 < 이력서를 :: Vec3i> V). 그것은 여러 번 행해질 것입니다. std :: vector 자체의 크기는 변경되지 않습니다.
for(int i=0; i<v.size(); i++)
for(int j=0; j<3; j++)
v[i][j] = 0;
지금 내가 경우 벡터를 재 할당하지 않습니다 C++ 98
재 할당을 최소화하려면'std :: shared_ptr'을 사용하십시오. 이 포인터를 다른 컨테이너로 자유롭게 복사 할 수 있으며 포인터 자체 만 복사됩니다. "읽기 전용"객체 접근법을 사용하면이 문제를 해결할 수 있습니다. – Flovdis
"no assignment of elements ..."가 의미하는 것은 새로운 요소가 매개 변수에서 복사 생성되고 복사 할당이 발생하지 않는다는 것입니다. 따라서 저장된 유형에 대해 잘 정의 된 사본 식별자가 있으면 걱정할 필요가 없습니다. – bstamour
@Flovdis는 C++ 11의 일부 ptr과 공유되지 않습니까? 우리가 C++ 98에 대해 이야기하고 있다고 생각했습니다. –