即時通訊嘗試使用STL查找算法(和min_element算法)找到向量中最小值的位置,但不是返回該位置,而是僅給出該值。例如,如果最小值是它,位置將被返回爲8等。我在這裏做錯了什麼?使用STL的向量中的位置
int value = *min_element(v2.begin(), v2.end());
cout << "min value at position " << *find(v2.begin(), v2.end(), value);
即時通訊嘗試使用STL查找算法(和min_element算法)找到向量中最小值的位置,但不是返回該位置,而是僅給出該值。例如,如果最小值是它,位置將被返回爲8等。我在這裏做錯了什麼?使用STL的向量中的位置
int value = *min_element(v2.begin(), v2.end());
cout << "min value at position " << *find(v2.begin(), v2.end(), value);
min_element
已經給你一個迭代器,不需要調用find
(另外,這是低效的,因爲它是工作的兩倍)。使用distance
或-
操作:
cout << "min value at " << min_element(v2.begin(), v2.end()) - v2.begin();
我用名單試了一下,把我的腦袋關掉!爲什麼? – prakharsingh95 2014-09-02 14:50:52
@ prakharsingh95因爲你正在使用大寫鎖定(因爲你沒有仔細閱讀我的答案 - 嘗試`std :: distance`)。 – 2014-09-02 15:46:49
你使用回迭代器這兩種算法。如果取消引用一個迭代器,你這是「尖」通過這個迭代的對象,這就是爲什麼你打印值而不是位置做
cout << "min value at position " << *find(v2.begin(), v2.end(), value);
的迭代器時可以被視爲一個指針(呃,不完全是,但爲了簡單起見我們這麼說);因此,迭代器本身不能給你在容器中的位置。既然你遍歷一個向量,就可以使用減號運算符,如康拉德說:
cout << "min value at " << min_element(v2.begin(), v2.end()) - v2.begin();
但我會建議使用的std ::距離算法,這是更爲靈活,將工作在所有標準容器:
cout << "min value at " << distance(v2.begin(), min_element(v2.begin(), v2.end()));
簡短的回答,你認爲你有問「我如何確定std::vector<>
位置給出從它的迭代器?」是功能std::distance
。
什麼你大概的意思做,然而,得到的迭代器,你提領它獲得的價值:
using namespace std;
vector<int>::const_iterator it = min_element(v2.begin(), v2.end());
cout << "min value at position " << distance(v2.begin(), it) << " is " << *it;
有一個在你的問題一個錯字:你說你想要找的* vector中的最大*值,而您顯然正在嘗試查找* minimum *值。 – 2008-10-08 14:13:50