Режим, являющийся числом, которое чаще всего встречается в наборе чисел Мне нужен мой код для обработки одиночных режимов, мультирежимов и режимов. У меня есть следующий код, который я в настоящее время используется, но она имеет несколько ошибок:Векторный режим
vector<int> findMode(vector<int>& v){
int curBig = 0;
int absBig = 0;
vector<int> mode;
vector<int>::iterator it;
//sort for easy comparing of numbers
sort(v.begin(), v.end());
//loop for as long as the vector is
for (auto x : v){
//as long as x is less than the size of v, do the rest (if x was the size of v, then v[x+1] would be out of bounds
if (x < v.size() - 1){
//compare the current number and the number after it
if (v[x] == v[x + 1]){
//if they're the same incrament current big by 1
curBig++;
//if current big is bigger than the absolute big then set absBig to curBig
if (curBig > absBig){
absBig = curBig;
}
}
//reset curBig for the next set of numbers
else
curBig = 0;
}//x < v.size()
}//auto x : v
int newBig = 0;
//if abs is not 0, do the following
if (absBig > 0){
for (auto x : v){
//runs basically the same ifs as above
if (x < v.size() - 1){
if (v[x] == v[x + 1]){
newBig++;
//this is supposed to push the mode(s) to the back of the vector
if (newBig == absBig){
mode.push_back(v[v.front() + x]);
}
}
}
}
}
else if (absBig == 0)
mode.push_back(-999);
return mode;
}
, а затем в основном, я использовал это, чтобы распечатать режим (ы):
if (mode[0] != -999){
cout << "{";
for (vector<int>::iterator it = mode.begin(); it != mode.end(); ++it){
cout << *it;
if (it < mode.end() - 1){
cout << ", ";
}
cout << "}" << endl;
}
}
else
cout << "No Modes" << endl;
Theres просто две ошибки, которые я не могу вычислить. , если вектор ints имеет режим двух (то есть 1,2,2,3,4 и т. Д. [Режим равен 2]), программа видит это просто как «Нет режима». Очевидно, что я где-то в 1 раз, я просто не вижу, где именно.
И вторая ошибка, которую я испытываю, заключается в том, что «mode.push_back (v [v.front() + x]); не делает то, что он должен. на мой взгляд, любое число, которое соответствует критериям (любое число, которое является режимом), должно быть перенесено в обратную сторону вектора режима, но по какой-то причине мой вектор режима может хранить только один номер. Возможно, у меня есть синтаксическая ошибка, которую я не вижу?
Любая помощь была бы принята с благодарностью!
Я попробую то, что вы сказали. У меня было v [x] заранее, и я решил, что это правильно, однако кто-то (здесь) сказал мне иначе (использовать v.front() и т. Д.), Поэтому, не спрашивая, я использовал его метод, я буду реализовывать ваши предложения и вернитесь с ответом в нескольких –
@CristianC. Для того, чтобы мое последнее предложение работало, вам также необходимо заменить for-loops, как я предложил. – Nabla
Большое вам спасибо, ваше предложение исправило одну из моих ошибок, теперь только один, и я буду очень доволен. для (без знака x = 0; x