2017-01-28 104 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())和(up - v.begin())在第三和第四行從底部。使用std :: lower_bound

如果我做

cout << low << endl; 

我得到它我不將follwoing錯誤理解

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

回答

2

* low *是您聲明的迭代器。它包含由您的PC生成的內存地址,您不需要任何內存地址即可返回。通過書寫

low- v.begin() 

您對程序發出命令以返回搜索查詢的實際位置作爲答案。

這就是爲什麼它返回一個值

​​

假設你的載體起始內存地址是FFF1和你的搜索值爲FFF8 ......然後返回FFF8 - FFF1 = 7。(這個例子僅僅是以說明)

這就是我的理解。

+0

謝謝。正是我需要理解的。對不起,這個小問題。 –

+0

不客氣。 – ssavi

1

兩個減法計算在矢量位置lowup發現元素的偏移通過分別計算迭代器v.begin()和迭代器lowup之間的增量。爲了使代碼更清晰,使用std::distance可能會更好。

當您嘗試使用cout << low << endl;時,您試圖打印出迭代器的值。這是非常不同的。哦,你錯過了std ::命名空間參考coutendl

+0

謝謝。我現在明白了。 –

相關問題