可比较的向量。我的代码似乎没有提取正确的值
Comparables in vectors. My code doesn't seem to be pulling the correct values
#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 个)。我想我应该在这里使用指针从向量而不是地址中提取实际值,但我不熟悉这样做的语法,或者我确切需要 * 和 & 的地方。
问题出在您对 range-based for
loop 的使用上。它迭代容器中的值,而不是为您提供向量中的索引。
所以在循环中 i
是向量中的 值 。
#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 个)。我想我应该在这里使用指针从向量而不是地址中提取实际值,但我不熟悉这样做的语法,或者我确切需要 * 和 & 的地方。
问题出在您对 range-based for
loop 的使用上。它迭代容器中的值,而不是为您提供向量中的索引。
所以在循环中 i
是向量中的 值 。