2017-01-28 1 views
0
// lower_bound/upper_bound example 
#include <iostream>  // std::cout 
#include <algorithm> // std::lower_bound, std::upper_bound, std::sort 
#include <vector>  // std::vector 

int main() { 
int myints[] = {10,20,30,30,20,10,10,20}; 
std::vector<int> v(myints,myints+8);   // 10 20 30 30 20 10 10 20 

std::sort (v.begin(), v.end());    // 10 10 10 20 20 20 30 30 

std::vector<int>::iterator low,up; 
low=std::lower_bound (v.begin(), v.end(), 20); //  ^
up= std::upper_bound (v.begin(), v.end(), 20); //     ^

std::cout << "lower_bound at position " << (low- v.begin()) << '\n'; 
std::cout << "upper_bound at position " << (up - v.begin()) << '\n'; 

return 0; 
} 

이 코드에서는 누군가가 왜 우리가 (낮은 - v.begin()) 및 (- v.begin())을 3 번째와 4 번째 줄에해야하는지 설명 할 수 있습니까? 바닥.std :: lower_bound 사용

내가 할 경우

cout << low << endl; 

나는 내가 해달라고 때라도 오류가 두 뺄셈은 벡터의 위치 lowup에서 발견 된 요소의 오프셋을 계산할

cannot bind ‘std::ostream {aka std::basic_ostream}’ lvalue to ‘std::basic_ostream&&’ 

답변

2

* low *는 선언 한대로 반복자입니다. 그것은 당신의 PC에 의해 생성 메모리 주소를 보유하고 반환하는 메모리 주소가 필요하지 않습니다. 작성하여

프로그램에 명령을 사용하여 검색 쿼리의 실제 위치를 답으로 반환합니다. 이 값이 반환하는 이유

그건 년대

Address Position - Beginning of the Vector Position 

가정하여 벡터 시작 메모리 주소는 FFF1이고 당신의 검색 값은 그 다음이 FFF8 반환 ... FFF8에있다 - 예 그냥 (FFF1 = 7 ..을 설명하기 위해)

그것이 내가 이해하는 방법이다.

+0

감사합니다. 정확히 내가 이해할 필요가 있었던 것. 사소한 질문에 죄송합니다. –

+0

반갑습니다. – ssavi

1

이해할 수 이터레이터 v.begin()과 이터레이터 lowup 사이의 델타를 각각 계산합니다. 이 코드를 명확하게하려면 std::distance을 사용하는 것이 좋습니다.

cout << low << endl;을 사용하려고하면 이터레이터의 값을 인쇄하려고했습니다. 그것은 매우 다릅니다. 아, 그리고 coutendl 주위에 std :: namespace 참조가 없습니다.

+0

감사합니다. 이제 알겠습니다. –

관련 문제