分配向量中元素的索引而不是其值

Posted

技术标签:

【中文标题】分配向量中元素的索引而不是其值【英文标题】:Assign the index of an element in a vector instead of its value 【发布时间】:2015-03-04 02:01:23 【问题描述】:

我试图找到一个元素在向量中的位置,然后将它分配给一个变量,但由于某种原因它不起作用。

我在这里使用vector.at(),就像在本网站上做同样事情的人所使用的那样。但是,当我在我的情况下使用它时,它的所有返回都是实际元素本身而不是位置。

这是我的循环。它旨在循环遍历向量以找到最大值并将其分配给变量(此炒锅)max,并将其位置分配给变量pos,但这不起作用。

for (int i = 0; i <= people.size(); ++i) 
    if (people[i] > max) 
        max = people[i];
        pos = people.at(i);
    

people 是我的 向量。

【问题讨论】:

嗯,位置是,嗯,i 循环条件也需要&lt;而不是&lt;= 【参考方案1】:

您的循环在最后一次迭代中超出范围:

for (int i = 0; i <= people.size(); ++i) 
                  ^^

应该是:

for (int i = 0; i < people.size(); ++i) 

其次,i是最大元素的位置,不是people.at(i)

最后,std::max_element 已经为您完成了所有这些工作:

http://en.cppreference.com/w/cpp/algorithm/max_element

#include <algorithm>
#include <iostream>
#include <vector>

int main()

    std::vector<int> people = 5, 6,12, 3, 5, 9;
    auto it = std::max_element(people.begin(), people.end());
    std::cout << "largest element is " << *it << " at people[" << std::distance(people.begin(), it)
    << "]";

输出:

largest element is 12 at people[2]

现场示例:http://ideone.com/fp0T7i

【讨论】:

以上是关于分配向量中元素的索引而不是其值的主要内容,如果未能解决你的问题,请参考以下文章

C ++:检查向量中的元素是不是大于另一个具有相同索引的元素的有效方法?

为啥我无法在向量中找到元素的索引? [复制]

如何从传递给某些 STL 算法的谓词中获取元素的索引?

用于向量中结构的 C++ 访问索引或使用引用而不是值

MATLAB 的 svmtrain :保存支持向量索引而不是支持向量本身

如何通过C ++中的数据获得向量的索引