如何保存min_element结果的位置?

时间:2012-02-13 05:54:08

标签: c++ vector iterator

如何保存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());

但这不起作用。我将用不同的元素替换该索引处的元素。

3 个答案:

答案 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()