이의 문제 시각화 지원하는 도우미 클래스 만들어 보자 벡터의 크기가 증가하지 않습니다가 직접 오류가 발생하지 않습니다 예약 후 :: 성병에 벡터를 할당하지만
class C
{
int ID = 0;
public:
C(const int newID)
{
ID = newID;
}
int getID()
{
return ID;
}
};
것은 당신이 빈 std::vector<C>
다음 예약을 만들 가정을
std::vector<C> pack;
pack.reserve(10);
printf("pack has %i\n", pack.size()); //will print '0'
지금, 당신은 C
의 새로운 인스턴스를 할당 : 그것은 10 개 요소를 개최합니다
0 여기 이상으로 두 가지를 발견
1) 할당 컴파일러 (비주얼 스튜디오 2015 출시 모드)도 릴리스 모드에서 오류가 발생해서는 안?
2) 실제로 요소가 위치 4에 저장 되었기 때문에 벡터가 0이 아닌 크기 = 1을 갖지 않아야합니까?
가능한 복제 [벡터 간의 선택 :: (크기 조정) 및 벡터 :: 보호구() (https://stackoverflow.com/ :
pack.at(4) = C(57);
예외를예 예외 :이다
질문/7397768/vector-choice-vectorsresize 및 vectorreserve) –
@underscore_d 내 질문은 그 중 하나의 중복입니다 절대적으로 없습니다. 아니에요. '예비 '와'크기 조정'이하는 일을 꽤 잘 압니다. 내 질문은 '예약'이 호출 된 후 'at'의 동작에 관한 것입니다. – blipblop
_ "내 질문은 'at'의 동작에 관한 것입니다. _ 긴 샷이 아닙니다. 어떻게 지구상에서'.at()'의 행동에 대해 그것이 한 번이라도 그 방법을 언급하지 않을 때 어떻게됩니까? '.at()'를 사용했다면, 프로그램은 정의되지 않은 동작을 생성하는 대신 명확한 오류를 신호로 보냅니다. 어쨌든, 당신의 질문은'.resize()'가 아닌'.reserve()'와''operator []' '를 포함한 특정 방법으로''를 증가시킬 수 있는지 묻는 것입니다. size()','.reserve()'이후의 할당되지 않은 점에 대한 색인 생성이 가능한지 여부를 지정합니다. '.at()'가 당신에게 말했던 것처럼 –