누군가 아래 코드가 작동하고 사실을 나타내는 이유를 설명 할 수 있습니까? v1.begin()
은 반복자를 생성하지만 비교 함수 내에서 v1.begin()
의 값을 검사하면 디버깅 할 때 벡터의 첫 번째 요소 값이 표시됩니다.벡터 반복기 및 템플릿 함수
이것은 템플릿 내에서 반복자의 이름을 지정하기 위해 typename vector<T>::iterator
을 사용해야한다는 사실과 관련이 있습니까? 누군가가이
덕분에
template<class U, class V> bool compare(const U &v1, const U &v2, const V &v3) {
if ((v1 == v2) && (v2 == v3)){
return 1;
} else {
return 0;
}
}
#include<iostream>
#include<vector>
using namespace std;
int main() {
vector<int> v1(10,3);
vector<int> v2(10,3);
bool iComp = compare(v1.begin(), v1.begin() + 2, v2.begin());
cout << typeid(v1.begin()).name() << " " << *v2.begin() << endl;
return 1;
}
'iComp'는'false'로 평가됩니다. 그래서 나는 그 질문을 이해하지 못한다. –
맞습니다. iComp의 값은 확인하지 않았지만 단순히 함수의 v1, v2 및 v3 값을 확인하지 않았습니다. 어떤 이유인지 모르지만 VC++ 2010에서 v1, v2 및 v3을 가리키면 함수가 3 변수의 값을 3으로 표시하므로 True를 생성한다고 가정합니다. 그것은 논리가 나에게 말하고있는 그대로 그것이 doesnt하는 것이 좋다. 죄송합니다. 신중하게 확인하지 않았기 때문에 죄송합니다. – RandomCPlusPlus
Visual C++는 이터레이터가 가리키는 *을 유용하게 표시합니다. 그것이 당신이보고있는 것입니다. 'v1','v2'와'v3'는 모두 반복자입니다. –