如何保存min_element的值?它说它是一个前向迭代器,但我似乎无法弄清楚如何保存(分配给变量)它。我希望能够通过向量中的位置访问它。我能找到的只是使用实际元素的例子(使用* min_element())。我试过了
iterator< forward_iterator_tag, vector<string> > min_word_iterator = min_element(first_words_in_subvecs.begin(), first_words_in_subvecs.end());
但这不起作用。我将用不同的元素替换该索引处的元素。
答案 0 :(得分:5)
使用此:
std::vector<T>::iterator minIt = std::min_element(v.begin(),v.end());
//where T is the type of elements in vector v.
T minElement = *minIt; //or T & minElement = *minIt; to avoid copy!
在C ++ 11中(如果您的编译器支持auto
关键字),那么:
auto minIt = std::min_element(v.begin(), v.end());
//type of minIt will be inferred by the compiler itself
T minElement = *minIt; //or auto minElement = *minIt;
//or auto & minElement = *minIt; to avoid copy
答案 1 :(得分:4)
您可以使用stl提供的distance来查找位置。 您需要将min_element返回的迭代器传递给它以获取位置
请参阅此示例代码
#include <iostream>
#include <iterator>
#include <algorithm>
#include <vector>
using namespace std;
int main () {
vector<int> myvec;
int i = 0;
for (i=8; i>0; i--)
{
myvec.push_back (i*10);
}
for (i=0; i<8; i++)
{
cout<<"At pos :"<<i<<"|val is:"<<myvec.at(i)<<endl;
}
int min_pos = distance(myvec.begin(),min_element(myvec.begin(),myvec.end()));
cout << "The distance is: " << min_pos << "|value is "<<*min_element(myvec.begin(),myvec.end())<<endl;
return 0;
}
答案 2 :(得分:0)
如果有两个随机访问迭代器,通常可以从另一个中减去一个以找到它们之间的距离。因此,一旦获得了迭代器it
,就可以找到它引用的元素的索引it - my_vector.begin()
。