Форум программистов, компьютерный форум CyberForum.ru

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

Войти
Регистрация
Восстановить пароль
 
maSt
5 / 5 / 1
Регистрация: 28.02.2010
Сообщений: 166
#1

Удаление эллементов с массива - C++

09.11.2012, 11:49. Просмотров 341. Ответов 7
Метки нет (Все метки)

У меня к примеру есть массив
1 2 3 4 5 6
И нужно с него удалить все четные и освободить память занятую ненужными элементами.
Я делаю сортировку ,и по одному откидываю все четные в конец массива и освобождаю память которую они заняли.
1 3 5 2 4 6
Но такой метод забирает слишком много времени при большом количестве чисел в массиве.
Сказали что убрать элемент из массива можно намного быстрее , но если я просто уберу элемент мне все равно придется сдвигать массив на 1 влево?
Или есть какой-то выход?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.11.2012, 11:49     Удаление эллементов с массива
Посмотрите здесь:

Найти сумму четных эллементов матрицы, и сумму эллементов ниже главной диагонали - C++
Здравсвуйте,такая проблемка,нужно решить такую задачку, Дана матрица 4х4,найти сумму четных эллементов матрицы,и сумму эллементов ниже...

сложение эллементов массива - C++
помогите исправить задачу так, чтобы массив автоматически забивался #include<iostream.h> #include<math.h> void main() { int l,...

подсчитать количество эллементов - C++
#include "stdafx.h" # include <iostream> # include <conio.h> # include <Windows.h> using namespace std; int main () { ...

Не считает колличество эллементов - C++
#include <iostream.h> #include "stdafx.h" #include <stdio.h> #include <math.h> #include <conio.h> #include <stdlib.h> #include...

удаление элементов массива, совпадающих с элементами другого массива - C++
Здравствуйте, помогите найти ошибку в коде; суть задачи такая: удалить элементы из 1 массива, которые содержатся во 2 массиве. Как я...

Удаление элементов массива без буферного массива - C++
Требуется удалить элементы из массива, при это длинна массива уменьшится, ВАЖНО буферный массив не использовать! к примеру массив 12 23...

вычислить сумму всех эллементов двумерного макссива - C++
вычислить сумму всех эллементов двумерного макссива стоящих на главной диагонали.

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Kuzia domovenok
1889 / 1744 / 117
Регистрация: 25.03.2012
Сообщений: 5,922
Записей в блоге: 1
09.11.2012, 11:56     Удаление эллементов с массива #2
нет. массив это по определению непрерывный кусок памяти. Используй связанные списки или стандартную библиотеку и вектора.
можно сделать выделение нового куска памяти с копированием туда нужного подмассива, но раз тебе сказали, что даже просто "откинуть элементы в конец массива - медленно", то перевыделение памяти тоже далеко не быстро в сравнении с этим будет.
Oberok
5 / 5 / 0
Регистрация: 11.03.2011
Сообщений: 40
09.11.2012, 12:59     Удаление эллементов с массива #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
24
25
26
27
28
29
#include <iostream>
using std::cout;
using std::endl;
#include <vector>
using std::vector;
 
int main()
{
    int mass[10] = {1,1,2,2,3,4,5,10,15,13};
    vector<int> v(mass, mass + 10);
    
    
    for( int i = 0; i < v.size(); ++i)
    {  
       if(v[i] % 2 != 0)
       {
         v.erase(v.begin() + i);
         --i;
       }
    }     
    
    for( int j = 0; j < v.size(); ++j)
    {
      cout << v.at(j) << endl;   
    }  
      
   system("PAUSE");
   return 0; 
}
Хотя все равно после каждого удаления происходит перераспределение памяти.
I.M.
564 / 547 / 5
Регистрация: 16.12.2011
Сообщений: 1,389
09.11.2012, 14:25     Удаление эллементов с массива #4
Oberok, перераспределения памяти не будет. Будет просто копирование элементов вектора (для смещения влево)
maSt
5 / 5 / 1
Регистрация: 28.02.2010
Сообщений: 166
09.11.2012, 18:22  [ТС]     Удаление эллементов с массива #5
а если задать массив указателями , возможно ли как-то удалить n-ный элемент массива ?
То есть, к примеру имеем
1 2 3 4 5 6
Удаляем 2 и получаем
1 3 4 5 6 безо всяких передвижений?
Или же единственный вариант через векторы?
Kuzia domovenok
1889 / 1744 / 117
Регистрация: 25.03.2012
Сообщений: 5,922
Записей в блоге: 1
09.11.2012, 18:27     Удаление эллементов с массива #6
Цитата Сообщение от maSt Посмотреть сообщение
а если задать массив указателями , возможно ли как-то удалить n-ный элемент массива ?
Легче задать связанный список и тогда действительно: будут тебе и указатели, будет тебе и удаление/вставка без особенных затрат.
I.M.
564 / 547 / 5
Регистрация: 16.12.2011
Сообщений: 1,389
09.11.2012, 18:27     Удаление эллементов с массива #7
Собственно, есть списки, есть массивы. Они по-разному располагаются в памяти. Имеют свои плюсы и минусы.
У списков удаление идет без всякого бонусного копирования/перемещения. У массивов этого не избежать.
Поясните свои мысль про указатели.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.11.2012, 18:31     Удаление эллементов с массива
Еще ссылки по теме:

В одномерном массиве посчитать сумму эллементов после минимального - C++
Помогите срочно решить задачу на экзамене сижу!!! В одномерном массиве посчитать сумму эллементов после минимального

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

Определить максимум среди сумм эллементов диагоналей параллельных главной диагонали матрицы - C++
Дана целочисленная квадратная матрица Определить максимум среди сумм эллементов диагоналей параллельных главной диагонали матрицы. Буду...

Есть программа сортирующая массив из 1000 эллементов методом пузырька вставить счетчик времени - C++
Сколько не пытался все напрасно никак не могу вставить счетчик. помогите пжлст #include &quot;stdafx.h&quot; #include &lt;iostream&gt; using...

Вычислить для обратной матрицы сумму эллементов, расположенных над главной диагональю и под ней. С++ - C++
Программный код для формирования матрицы, а так же нахождения обратной матрицы #include &lt;conio.h&gt; #include &lt;math.h&gt; #include...


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

Или воспользуйтесь поиском по форуму:
Kuzia domovenok
1889 / 1744 / 117
Регистрация: 25.03.2012
Сообщений: 5,922
Записей в блоге: 1
09.11.2012, 18:31     Удаление эллементов с массива #8
Цитата Сообщение от maSt Посмотреть сообщение
Или же единственный вариант через векторы?
Как я уже сказал, есть вариант со связанными списками, векторы хороши тем, что всё сделано за нас, но удаление элемента из них всё равно происходит со сдвигом. Сама структура хранения вектора даёт быстрый доступ в произвольное место, но медленное удаление, и наоборот со списком.
Если уж юзать STL, то тогда используй <list>
Yandex
Объявления
09.11.2012, 18:31     Удаление эллементов с массива
Ответ Создать тему
Опции темы

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