使用STL在Vector中的位置

时间:2008-10-08 14:06:55

标签: c++ stl

我试图使用STL查找算法(和min_element算法)来定位向量中最小值的位置,但不是返回位置,而是只给我值。例如,如果它是最小值,则位置将返回为8等。我在这里做错了什么?

int value = *min_element(v2.begin(), v2.end());
cout << "min value at position " << *find(v2.begin(), v2.end(), value);

3 个答案:

答案 0 :(得分:34)

min_element已经为你提供了迭代器,不需要调用find(另外,它效率低,因为它是工作的两倍)。使用distance-运算符:

cout << "min value at " << min_element(v2.begin(), v2.end()) - v2.begin();

答案 1 :(得分:15)

您正在使用的两种算法都返回迭代器。如果取消引用迭代器,则会获得此迭代器“指向”的对象,这就是为什么在执行

时打印而不是位置的原因
cout << "min value at position " << *find(v2.begin(), v2.end(), value);

迭代器可以看作是一个指针(好吧,不完全是这样,但为了简单起见,我们这样说);因此,单独的迭代器不能给你容器中的位置。由于你正在迭代一个向量,你可以使用减运算符,正如康拉德所说:

cout << "min value at " << min_element(v2.begin(), v2.end()) - v2.begin();

但我建议使用std :: distance算法,它更灵活,适用于所有标准容器:

cout << "min value at " << distance(v2.begin(), min_element(v2.begin(), v2.end()));

答案 2 :(得分:7)

你认为你问的问题的简短回答“如果给出迭代器,我如何确定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;