이 문제가 있습니다.
int nCab = 11;
int nCabCombo;
std::vector<int>counter(nCab);
for(int i = nCab; i > 0; i--)
{
counter[i] = i-1;
std::cout<<counter[i]<<std::endl;
}
nCabCombo = std::accumulate(counter.begin(),counter.end(),0);
std::cout<<nCabCombo<<std::endl;
nCabCombo에 대한 출력은 55가되어야 할 때 45입니다. 어떤 이유로 accumulate 함수는 카운터 벡터의 인덱스 11에있는 10을 추가하지 않습니다. 누군가 내가 여기서 뭘 잘못하고 있는지 말해 줄 수 있습니까? 감사합니다!
counter[i] = i-1; //when i == 11, this is an off by one error
배열 및 확장하여 벡터의 범위는 [0, size)
. 이 경우 nCab
요소를 최대 지수는입니다 nCab - 1
. 벡터의 경계 밖에있는 마지막 요소를 저장하고 있습니다. 다음과 같이 변경해야합니다.
counter[i - 1] = i-1;
누락 된 요소는 10
. accumulate
실행 하면 합계가 10
.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다