C/C++

Не могу разобраться. Функция удаления отрицательных элементов вектора

ВСе перепробовал, что-то не доходит. Нужно написать функцию для удаления отрицательных элементов и потом к ней обратиться в main.(сейчас по такой аналогии сделано. Что-то навороченного применять не стоит. Пока учусь). И еще предполагаю можно как-то объединить функции поиска кол-ва отрицательных и положительных элементов в одну.

#include <iostream>
#include <iomanip>
using namespace std;
// Функция ввода стат. вектора
void inputv(double z[], int n) // Функция ввода стат. вектора
{int i;
for (i = 0; i<n; i++)
{
cin >> z[i];
}
}
//Функция вывода стат. вектора
void outputv(double z[], int n)
{ int i;
for (i = 0; i < n; i++)
{
if(i % 5 == 0) cout << endl;
cout << setw(10) << z[i];
}
}
// Функция для вычисления суммы полож. элементов
double suma(double z[], int n)
{
double S; // Сумма элементов
int i; // Переменная цикла
S = 0;
for (i = 0; i < n; i++)
{ if (z[i] > 0) // Сумма только положитнльных элементов
S = S + z[i];
}
return S;
}

// Функция для вычисления количества положительных элементов
double positive (double z[], int n)
{
int k = 0;
int i;
for (i = 0; i < n; i++)
{
if (z[i] < 0) k++;
else
}
return k;
}
// Функция для вычисления количества отрицатетелных элементов
double negative(double z[], int n)
{
int k = 0;
int i;
for (i = 0; i < n; i++)
{
if (z[i] > 0) k++;
}
return k;
}
void main()
{
setlocale(LC_ALL, "Russian"); // Русификация
double z[10], sz, pos, neg;
// Ввод вектора z
cout << "\n Ввести через пробел 10 координат вектора \n";
inputv(z, 10);
// Вывод вектора z
cout << "\n Вывод вектора z \n";
outputv(z, 10);
// Вычисление суммы
sz = suma(z, 10);
// Вычисление количества полож элементов
pos = positive(z, 10);
// Вычисление количества отр элементов
neg = negative(z, 10);

// Вывод результата
cout << "\n Сумма положительных элементов массива=" << sz << endl;
cout << "\n Количество отицательных элементов массива=" << pos << endl;
cout << "\n Количество отицательных элементов массива=" << neg << endl;
cout << endl;

}
Вот так?
Это функция для удаления отрицательных элементов, кстати Cppreference это топ сайт:)
Олег Ринкевич
Олег Ринкевич
3 186
Лучший ответ
Андрей Ананьев Ваш код, конечно, похож на правду. Но что-то вроде такого должно быть: а то я потом не поясню где я про erase начитался))
int k = 0;
for (int t = 0; t < nums.length; t++) {
if (nums[t] < 0)
k++;
else
nums[t - k] = nums[t];
}
#include <algorithm>
#include <iostream>
using namespace std;
double fn(double* vec, size_t& length) {
auto cmp = [](double x) { return x >= 0; };
auto buffer = count_if(vec, vec + length, cmp);
auto tmp = new double[buffer];
auto j = 0U;
auto sum = 0.0;
for (auto i = 0U; i < length; ++i) {
if (cmp(vec[i])) {
tmp[j] = vec[i];
sum += tmp[j];
++j;
}
}
length = j;
for (auto i = 0U; i < length; ++i) vec[i] = tmp[i];
delete[] tmp;
return sum;
}
int main() {
const auto buffer = 10U;
auto length = buffer;
system("chcp 1251 > nul");
cout << "Введите " << buffer << " координат вектора: ";
double vec[buffer];
for (auto i = 0U; i < length; ++i) cin >> vec[i];
auto sum = fn(vec, length);
auto neg = buffer - length;
cout
<< "Количество положительных элементов массива: " << length << '\n'
<< "Количество отрицательных элементов массива: " << neg << '\n'
<< "Сумма положительных элементов массива: " << sum << '\n'
<< "Новый массив: ";
for (auto i = 0U; i < length; ++i) cout << vec[i] << ' ';
puts("");
system("pause > nul");
}

Похожие вопросы