vector.resize와vector.reserve의 차이
1883 단어 vector
resize는 용기의 크기를 바꾸고 대상을 만듭니다. 따라서 이 함수를 호출하면 용기 내의 대상을 인용할 수 있습니다. 따라서 새로운 요소를 추가할 때operator[] 조작부호를 사용하거나 교체기로 원소의 대상을 인용합니다.
게다가 두 함수의 형식은 차이가 있다. reserve 함수 다음에 있는 매개 변수, 즉 미리 남겨진 용기의 공간이 필요하다.resize 함수는 두 개의 매개 변수가 있습니다. 첫 번째 매개 변수는 용기의 새로운 크기이고, 두 번째 매개 변수는 용기에 있는 새로운 요소를 포함합니다. 이 매개 변수가 생략되면 원소 대상의 기본 구조 함수를 호출합니다.다음은 두 함수 사용 예입니다.
vector<int> myVec;
myVec.reserve( 100 ); // ,
// []
for (int i = 0; i < 100; i++ )
...{
myVec.push_back( i ); //
}
myVec.resize( 102 ); //
myVec[100] = 1; //
myVec[101] = 2;
이 두 인터페이스를 처음 접하면 헷갈릴 수 있습니다. 사실 인터페이스의 명칭은 기능에 대한 절호의 설명입니다.resize는 크기를 재분배하는 것이고,reserve는 일정한 공간을 미리 남겨 두는 것입니다.이 두 인터페이스는 차이점도 있고 공통점도 있다.다음은 그것들의 세부 사항에 대해 분석을 진행한다.
resize의 의미를 실현하기 위해 resize 인터페이스는 두 가지 보증을 했다.
첫째, 구간 [0, new size) 범위 내의 데이터가 유효하다는 것을 보증합니다. 만약에 index가 이 구간에 표시되면vector[indext]는 합법적입니다.둘째, 구간 [0, new size) 범위 이외의 데이터가 무효임을 보증합니다. 만약 아래 표시된 index가 구간 밖에 있다면vector[indext]는 불법입니다.reserve는vector의 공간 크기 (capacity) 가 인자가 지정한 크기 n에 최소한 도달하도록 보장할 뿐입니다.구간[0,n) 범위 내에서 만약에 index라고 표시된다면vector[index]는 이런 방문이 합법적일 수도 있고 불법일 수도 있으니 구체적인 상황에 따라 정한다.
resize와 Reserve 인터페이스의 공통점은 바이어의 공간 크기 (capacity) 가 매개 변수가 지정한 크기에 최소한 도달하도록 보장한다는 것이다.
두 인터페이스의 소스 코드가 매우 간단하기 때문에 여기에 그것들을 붙일 수 있다.
void resize(size_type new_size) { resize(new_size, T()); }
void resize(size_type new_size, const T& x) {
if (new_size < size())
erase(begin() + new_size, end()); // erase ,
else
insert(end(), new_size - size(), x); // ,
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Vector & Matrix스칼라 : 하나의 숫자로만 이루어진 데이터 (크기만 있고 방향이 없는 물리량) 벡터 : 여러 숫자로 이루어진 데이터 레코드. 매트릭스 : 벡터가 여럿인 데이터집합 벡터의 크기는 스칼라배를 통해 표현할 수 있다. *내...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.