C++
C ++과 C ++ 11, C ++ 14, C ++ 17을 통해 해결 된 고전적인 C ++ 예제의 비교
수색…
컨테이너를 통해 루핑하기
C ++에서, 일련의 용기를 통해 루프 c
는 다음과 같이 인덱스를 사용하여 수행 할 수있다 :
for(size_t i = 0; i < c.size(); ++i) c[i] = 0;
간단하지만, 그러한 저작은 잘못된 비교 연산자 또는 잘못된 색인 변수와 같은 일반적인 의미 론적 오류가있을 수 있습니다.
for(size_t i = 0; i <= c.size(); ++j) c[i] = 0;
^~~~~~~~~~~~~~^
반복기를 사용하여 모든 컨테이너에 대해 루프를 수행 할 수 있으며 비슷한 단점이 있습니다.
for(iterator it = c.begin(); it != c.end(); ++it) (*it) = 0;
C ++ 11에서는 범위 기반 루프 및 auto
키워드를 도입하여 코드가 다음과 같이 될 수 있도록했습니다.
for(auto& x : c) x = 0;
여기서 유일한 매개 변수는 컨테이너 c
와 현재 값을 보유하는 변수 x
입니다. 이렇게하면 앞에서 지적한 의미 오류를 방지 할 수 있습니다.
C ++ 11 표준에 따르면 기본 구현은 다음과 같습니다.
for(auto begin = c.begin(), end = c.end(); begin != end; ++begin)
{
// ...
}
이러한 구현에서는 auto begin = c.begin(), end = c.end();
begin
과 end
은 동일한 유형이어야하며 end
은 결코 증가하지 않고 참조 해제되지 않습니다. 따라서 범위 기반 for 루프는 쌍 반복자 / 반복자로 정의 된 컨테이너에서만 작동합니다. C ++ 17 표준은 구현을 다음과 같이 변경하여이 제약을 완화합니다.
auto begin = c.begin();
auto end = c.end();
for(; begin != end; ++begin)
{
// ...
}
여기서 begin
과 end
은 불평등을 비교할 수있는 한 다른 유형이 될 수 있습니다. 이렇게하면 더 많은 컨테이너, 예를 들어 쌍 반복자 / 센티널에 의해 정의 된 컨테이너를 반복 할 수 있습니다.
Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow