Я делал приложение, которое вычисляет среднее, медианное и диапазон любых целых чисел, но я столкнулся с проблемой: векторный индекс вне диапазона. Я просмотрел некоторые другие сообщения об этом и до сих пор не смог его исправить.Проблемы с подстрочным индексом на C++
Вот мой код:
#include <iostream>
#include <Algorithm>
#include <Windows.h>
#include <vector>
using namespace std;
int main() {
//Variables
int sze;
int mraw = 0;
double mean;
double median;
double range;
int fullnum = 0;
int lastnum = 1;
vector<int> med;
cout << "How many numbers do you have? ";
cin >> sze;
int *arr = new int[sze];
for (int i = 0; i < sze; i++) {
med.push_back(arr[i]);
}
//Getting numbers
for (int i = 0; i < sze, i++;) {
system("cls");
cout << "Enter number #" << i + 1 << ": ";
cin >> arr[i];
}
//Mean
for (int i = 0; i < sze; i++){
fullnum += arr[i];
}
mean = fullnum/sze;
//Median
sort(med.begin(), med.end());
int mvs = sze;
while (med.size() >= 2) {
med.erase(med.begin());
med.erase(med.begin() + med.size() - 1);
mvs--;
}
if (mvs == 2) {
mraw = med[1] + med[2];
median = mraw/2;
}
else {
median = mvs;
}
//Range
vector<int> rnge;
for (int i = 0; i < sze; i++) {
rnge.push_back(arr[i]);
lastnum++;
}
sort(rnge.begin(), rnge.end());
int bigsmall[2];
bigsmall[1] = rnge[1];
bigsmall[2] = rnge[lastnum];
range = bigsmall[2] - bigsmall[1];
//Outputs
cout << "Mean: " << mean << "\nMedian: " << median << "\nRange: " << range;
system("cls");
return 0;
}
Помимо вопроса, выделенного в ответе ниже, вы фактически не вводите какие-либо значимые значения в свой вектор. Вы выделяете массив arr и немедленно копируете его содержимое (которые неинициализированы) в 'med', а затем продолжайте считывать значения в' arr'. Вы должны полностью избавиться от «arr» и просто использовать вектор. –
В чем смысл создания массива 'bigsmall'? Почему бы просто не использовать две переменные, 'int large, small'? – Barmar
'arr' и' med' полностью разделены. копирование значений из одного в другое не создает ссылку –