제어 흐름을 반복기

0

질문

말하는 내가 뭔가를 다음과 같다:

void myFunk(std::vector<T>& v, std::vector<T>::iterator first, std::vector<T>::iterator last) {
    while (first != last) {
        if ((*first) > (*last)) {
            T someT;
            v.push_back(someT);
        }
        first++;
    }
}

int main(){
    std::vector<T> foo = {some, T, values};
    myFunky(foo, foo.begin(), foo.end())
    return 0;
}

이 무한 루프를,또는 종료 후 foo.size() 반복? 다시 말해서,것 last 반복기를 업데이트로 foo 성장,또는 그 유지를 지정된 값이 함수 호출에?

나는 가정 last 변경 이후,그것은 포인터를 위치하지만,일부 확인합니다.

c++ controls flow iterator
2021-11-18 16:56:38
1

최고의 응답

0

이 무한 루프를,또는 종료 후 foo.size() 반복?

지 않습니다. 당신이 하는 무엇이 정의되지 않은 동작을 위해,몇 가지의 이유:

  • 당신은 수정 vector 는 동안 반복해요.

    으면 벡터 재할당 내부 저장소 경우를 밀어 새로운 항목,모든 기존으로 반복기 vector무효화,모두를 포함하여 반복자를 사용하여 루프가니다. 그러나 심지어 그냥 밀어 새로운 항목이 항상 무효화 end() 반복기,적어도 있습니다.

    반복자는 무효화 규칙을 위한 C++컨테이너

  • 당신은 역참조를 end() 반복기는 결코 의미하는 유효한 요소입니다.

나는 가정 last 변경 이후,그것은 포인터를 위치

그것은 변경할 수 없기 때문에 당신과로 myFunc 기능으로 가치,그래서 그것은 사본을end() 반복기입니다. 는 경우 end() 변화값, last 지 않을 것이 값을 변경한 것이기 때문에 복사본.

어떤 경우에,반복기는 반드시 구현되는 포인터로,그러나 포인터는 유효한 이터레이터입니다. 하지만 그것은 중요하지 않습니다. 는 경우에도 vector::iterator 그냥 단순한 포인터 last 을 얻을 것이 여전히 무효화에 따라 모든 밀어/할당.

2021-11-18 21:20:33

에 의해 전달 된 값을 의도적-아이디어였을 시도 를 반복하는 벡터의 현재 값을 추가하는 동안 새로운 것입니다. 는 의미가 되었 메모리 액세스 위반 at run-time. 에 대한 감사를 무효화 규칙을 플러그(나는 내가 무엇을 찾고 문서화되었지 못하는 말로 그것). 감사에 대한 답변 사람이다. 정말 삭제하는 것입니다. Cheers!
Pedro Barbeira

는 것이 좋 캐싱에 삽입하는 지역 벡터,그리고 다음에 추가하여 최종 대상의 벡터 한 후에는 반복이 완료됩니다.
Remy Lebeau

다른 언어로

이 페이지는 다른 언어로되어 있습니다

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................