Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
tnk500
113 / 117 / 25
Регистрация: 25.08.2012
Сообщений: 1,292
Завершенные тесты: 3
#1

Как удалять определенные значения из массива? - C++

13.08.2014, 20:49. Просмотров 1777. Ответов 4
Метки нет (Все метки)

Пишу программу по одной задаче, в которой требуется удалить элементы, значение которых меньше среднего арифметического динамического массива. Думал, элемент возможно удалить с помощью delete[индекс элемента]", но это не работает. В гугле нашел несколько методов, но описаны они были как-то криво, в итоге я ничего не понял. Так как удалять элементы из простого и динамического массива? Объясните подробно
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.08.2014, 20:49
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Как удалять определенные значения из массива? (C++):

Выбрать в обратном порядке определенные значения из массива - C++
Дано натуральное число n и целые числа a1,...an. Если в данной последовательности ни одно положительное число не расположено после...

Как удалять элементы массива? - C++
как в массиве удалять элементы?

Как правильно удалять элемент из массива? - C++
Подскажите пожалуйста как правильно удалять элемент из динамического массива к примеру максимального? Путём смещения элементов,или просто...

Как удалять из массива элементы, первая цифра которых четная - C++
Дан массив целых чисел из n элементов, заполненный случайным образом числами из промежутка . Удалить из него все элементы, первая цифра...

Реализовать функции, позволяющие добавлять/удалять блок элементов в массива/из массива - C++
Уважаемые форумчане, помогите, пожалуйста, с написанием программы. Нужно в динамическом одномерном массиве, размер которого указывает...

Составить программу вычисления матрицы по формуле, и подсчитать для нее определенные значения. - C++
Задание Необходимо составить программу, которая 1)По формуле указанной в пункте «а» задания, используя значения номеров строк и...

4
zss
Модератор
Эксперт С++
6530 / 6092 / 2007
Регистрация: 18.12.2011
Сообщений: 15,844
Завершенные тесты: 1
13.08.2014, 21:01 #2
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
C++
1
2
3
4
5
6
7
8
int n;cin>>n;
int* a=new int[n];// создали динамический массив
//const int n=10; int a[n];// объявление обычного массива
....
int k;cin>>k;// номер удаляемого элемента
if(k>=0 && k<n)
   for(int i=k;i<n-1;i++)
       a[i]=a[i+1];//удалили k элемент сдвинув все остальные на 1  влево
1
BlackIce
310 / 172 / 64
Регистрация: 18.01.2014
Сообщений: 387
13.08.2014, 21:17 #3
Никак, только переприсвоить этому элементу значение следующего, слудующему значение следующего за ним и т.д. до конца массива, при этом размер массива и выделенной для него памяти не изменяется и вы сами должны следить за текущей длинной массива:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <ctime>
#include <cstdlib>
#include <numeric>
#include <iostream>
#include <algorithm>
#include <functional>
using namespace std;
 
int main() {
    srand(time(0));
    int *a = new int[10], n = 10;
    cout << "массив:";
    for (int i = 0; i < n; ++i) {
        a[i] = rand() % 100;
        cout << ' ' << a[i];
    }
    double avg = accumulate(a, a + n, 0.0) / n;
    cout << "\nсреднее арифметическое: " << avg << endl;
    n = remove_if(a, a + 10, bind2nd(less<double>(), avg)) - a;
    cout << "результат:";
    for (int i = 0; i < n; ++i) cout << ' ' << a[i];
    delete[] a;
}
Если вам нужно именно удалять, то можете воспользоваться std::list или реализовать свой класс для списков.
1
tnk500
113 / 117 / 25
Регистрация: 25.08.2012
Сообщений: 1,292
Завершенные тесты: 3
14.07.2015, 20:35  [ТС] #4
zss, о кстати, только щас заметил, что размер массива не уменьшается (если массив будет потом использоваться, можно случайно к последнему элементу обратиться, который по идее должен быть недоступен, ну и который будет копией предпоследнего элемента), поэтому в 6-ой строчке нужно написать "--n", а в 7-ой из "n-1" убрать -1
0
S_el
2113 / 1633 / 308
Регистрация: 15.12.2013
Сообщений: 6,576
14.07.2015, 20:36 #5
tnk500, используйте std::vector<>
0
14.07.2015, 20:36
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.07.2015, 20:36
Привет! Вот еще темы с ответами:

Найти предельные значения для целочисленных типов. Не использовать заранее определенные константы границ типов. - C++
Буду благодарен! Найти предельные значения для целочисленных типов. Не использовать заранее определенные константы границ типов.

Как удалять элемент из строки в c++? - C++
Как удалять элемент из строки в c++?

Как правильно удалять элементы листа? - C++
std::list&lt;Bullet*&gt; bullets; std::list&lt;Bullet*&gt;::iterator bullets_it; for (bullets_it = bullets.begin(); bullets_it !=...

как задавать свои значения массива? - C++
#include &lt;iostream&gt; #include&lt;cstdio&gt; #include&lt;cmath&gt; #include&lt;conio.h&gt; #include&lt;stdlib.h&gt; #include&lt;iomanip&gt; using namespace...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru