矢量中的可比较物。我的代码似乎没有提取正确的值

时间:2017-02-03 18:45:13

标签: c++ c++11 templates pointers comparable

#include <vector>
#include <string>
template <typename Comparable>
const Comparable & findKthLargest( const std::vector<Comparable> & v, const int k){

int counter;
Comparable j;
for (Comparable i : v){
    counter = 0;
    j = v[i];
    for(Comparable p : v){
        if(v[p] > j){
            counter++;
        }
    }

    if(counter == k){
        return v[i];
    }
}
return -1;
}

我传递了一个可比较的向量和一个整数k。我需要找到给定数组中最大的“kth”。这段代码的工作原理是迭代一次可比较的向量,并检查向量中有多少其他可比对象比它大。 (数组中最大的元素将产生0,第二大元素将产生1)。例如:

我通过了矢量:

{ 5,4,7,6,3,8,4,9 }

并且测试运行是:

REQUIRE( findKthLargest(kth_ints, 0) == 9);
REQUIRE( findKthLargest(kth_ints, 1) == 8);
REQUIRE( findKthLargest(kth_ints, 3) == 6);

我正在通过前两个,而不是第三个(我想我得到4而不是6)。我想我应该在这里使用指针从向量而不是地址中提取实际值,但是我不熟悉这样做的语法,或者我需要*和s&amp; s的确切位置。< / p>

1 个答案:

答案 0 :(得分:2)

问题是您使用range-based for loop。它迭代容器中的值,而不是将索引提供给向量。

所以在循环中i是来自向量的