, V1은 CONST이어야 또는 m은 const_iterator를해야 하는가?
반복기를 전달하기로 결정하면 시작과 끝이라는 두 개의 인수를 전달해야합니다. 그렇지 않으면 반복을 중단 할시기를 알 수 없습니다.
다음은 작동하지 않습니다.
void foo (vector<int>::const_iterator start) {
// for(m=v1.begin();m1!=v1.end();++m1)
for (auto m1 = start; m1 != v1.end(); ++m1) // There is no way to compute v1.end().
//loop body
}
다음 작업을 수행하십시오. 의미
void foo (vector<int>::const_iterator start, vector<int>::const_iterator end) {
for ( auto m1 = start; m1 != end; ++m1)
//loop body
}
, 당신과 함께 함수를 호출해야합니다 : 벡터의 내용의 부분 집합을 반복하는 지원 할 필요가없는
foo(v11.begin(), v11.end());
을 지원 할 필요가 없습니다 이 버전은 foo
입니다.
반면에 너무 많은 문제없이 지원할 수 있습니다. 수
void foo (vector<int>::const_iterator start, vector<int>::const_iterator end) {
for ( auto m1 = start; m1 != end; ++m1)
//loop body
}
void foo (vector<int>::const& v) {
foo(v.begin(), v.end());
}
당신이
vector<int> v11={0,1,2,3,4};
foo(v11); // Do something for all the elements of v11.
foo(v11.begin(), v11.begin()+2); // Do the same thing only for the first two elements of v11.
는'v1'가'const'되어야 사용'm'은'auto'해야한다. – DeiDei
왜'v1'은'const'이어야합니까? 그리고'C++ 11 '은'auto' 키워드를 제공합니다. 그러나 명시 적 형식을 지정하는 것이 '자동'과 비교하여 성능이 더 빠르지 않아야합니다. – edf233
@ edf233 : 아니요. '자동'은 순전히 구문 당입니다. 성능에 부정적인 영향을주지는 않습니다. –