如何在行dValues[]
中获取double dValues[] = {what should i input here?}
?因为我正在使用数组。目标是获得模式。
#include <iostream>
#include <vector>
#include <numeric>
using namespace std;
double GetMode(double daArray[], int iSize) {
// Allocate an int array of the same size to hold the
// repetition count
int* ipRepetition = new int[iSize];
for (int i = 0; i < iSize; ++i) {
ipRepetition[i] = 0;
int j = 0;
bool bFound = false;
while ((j < i) && (daArray[i] != daArray[j])) {
if (daArray[i] != daArray[j]) {
++j;
}
}
++(ipRepetition[j]);
}
int iMaxRepeat = 0;
for (int i = 1; i < iSize; ++i) {
if (ipRepetition[i] > ipRepetition[iMaxRepeat]) {
iMaxRepeat = i;
}
}
delete [] ipRepetition;
return daArray[iMaxRepeat];
}
int main()
{
int count, minusElements;
float newcount, twocount;
cout << "Enter Elements:";
std::cin >> count;
std::vector<float> number(count);
cout << "Enter " << count << " number:\n";
for(int i=0; i< count ;i++)
{
std::cin >> number[i];
}
double dValues[] = {};
int iArraySize = count;
std::cout << "Mode = "
<< GetMode(dValues, iArraySize) << std::endl;
答案 0 :(得分:2)
您已经拥有number
向量中的所有值,但如果您想将这些值复制到名为dValues
的新数组中,则必须在堆上分配它(因为您不能在编译时知道大小),从向量中复制元素,然后释放该内存:
double *dValues = new double[number.size()];
for (size_t i = 0; i < number.size(); i++)
{
dValues[i] = number[i];
}
// whatever you need to do with dValues
delete [] dValues;
你也没有检查你是否在for
循环中的向量范围内。更安全的实现将使用push_back()
上的vector
方法,而不是按索引分配值。
答案 1 :(得分:0)
如果我理解正确,您希望将向量中的元素复制到数组中。如果是的话 -
float *dValues = new float[count] ; // Need to delete[] when done
std::copy( number.begin(), number.end(), dValues );
std::copy位于算法标题中。但是为什么要为此任务使用/创建原始数组。您已经拥有了向量number
,只需将其传递给GetMode(..)