以前に見たことのないエラーが発生しました。これは、物事への参照があいまいであることを示しています。
実行中の中央値を計算する小さなテスト プログラムを作成しています。リストが大きくなるにつれて、中央値が再計算されます。この場合、中央値はリストの中央の数字 (または上中央) を意味します。したがって、7 の中央値は 7、7 と 9 の中央値は 9、7 3 と 9 の中央値は 7 です。
私はこれを2つの動的配列で達成しています(願っています)。最初に、最初の値が中央値として設定され、入力された各数値が現在の中央値と比較されます。中央値は、2 つの配列間の中間要素を計算するために取得されます。
左の配列は中央値よりも小さいすべての値を表し、右の配列はそれより大きいすべての値を表します。挿入ソートを使用して、各配列の数値を並べ替えます (ほぼソートされたリストに最適です)。
発生しているエラーやどこが間違っているのか理解できません。私は C++ にかなり慣れていないので、この問題に対するより単純なアプローチを選択しました。
#include <cstdlib>
#include <iostream>
#include <string>
#include <vector>
using namespace std;
vector<int> left;
vector<int> right;
int leftCount = 0;
int rightCount = 0;
void leftInsertionSort(int);
void rightInsertionSort(int);
void inputNumber(int, int);
int main(int argc, char** argv) {
int length = 0;
int value;
int median;
string input;
while (cin >> input) {
value = atoi(input.c_str());
inputNumber(value, median);
if (leftCount > rightCount) {
median = (((leftCount + rightCount) / 2) + 1);
cout << left[median];
} else {
median = (((leftCount + rightCount) / 2) + 1) - leftCount;
cout << right[median];
}
}
return 0;
}
void inputNumber(int value, int median) {
if (leftCount == 0 && rightCount == 0) {
left[0] = value;
median = value;
leftCount++;
} else
if (leftCount == 1 && rightCount == 0) {
right[0] = value;
if (left[0] > right[0]) {
right[0] = left[0];
left[0] = value;
}
median = right[0];
rightCount++;
} else
if (value < median) {
left[leftCount] = value;
} else {
right[rightCount] = value;
}
}
void leftInsertionSort(int lLength)
{
leftCount++;
int key, i;
for(int j = 1; j < lLength; j++)
{
key = left[j];
i = j - 1;
while (left[i] > key && i >= 0) {
left[i+1] = left[i];
i--;
}
left[i+1] = key;
}
}
void rightInsertionSort(int rLength)
{
rightCount++;
int key, i;
for(int j = 1; j < rLength; j++)
{
key = right[j];
i = j - 1;
while (right[i] > key && i >= 0) {
right[i+1] = right[i];
i--;
}
right[i+1] = key;
}
}
私が得ているように見えるエラーは「エラー:「左」への参照があいまいです」です