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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 18, средняя оценка - 4.72
Sasuke
 Аватар для Sasuke
0 / 0 / 0
Регистрация: 09.10.2009
Сообщений: 89
13.11.2009, 21:32     Как поменять размерность массива? #1
Здравствуйте! Я пытаюсь решить одну задачу, но у меня нет мыслей, как действовать... когда я дохожу к тому, что нужно поменять размерность массива. Вот, собственно говоря, условие задачи:
Удалить из массива:
а) все отрицательные элементы;
б) все элементы, большие данного числа n;
и изменить размерность массива

Я написал программу, но не затрогнул тему изменения размерности. Немогли бы вы мне помочь разобраться?


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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
#include <iostream>
#include <stdlib.h>
#include <ctime>
using namespace std;
int main ()
{
    int *K;
    int i,j,k,x,x1;
    srand(time(NULL));
    cout<<">> Vvedite koli4estvo elementov massiva: ";
    cin>>x;
    if((K=(int*)malloc(x*sizeof(int)))==NULL) 
    { 
        cout<<"Ne dostato4no pamyati!\n"; 
        return 1;
    }
    for (i=0; i<x; i++)
    {
        *(K+i)=rand()%201-100;
    }
    cout<<">> Massiv:\n";
    for (i=0; i<x; i++)
    {
        cout<<*(K+i)<<" ";
    }
    //a)
    cout<<'\n'<<"\n>> New Massiv (1):\n";
    for (i=0,j=0,k=0; i<x; i++,j++)
    {
        if (*(K+i)>=0)
            {cout<<*(K+i)<<" ";
            *(K+i)=*(K+j);
            k++;}
    }
    //b)
    cout<<'\n'<<"\nVvedite nomer elementa massiva: ";
    cin>>x1;
    cout<<New Massiv (2): ";
    for (i=x1; i<x; i++)
    {
        cout<<*(K+i)<<" ";
    }
    cout<<'\n'<<'\n';
    free(K);
    return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.11.2009, 21:32     Как поменять размерность массива?
Посмотрите здесь:

Как задать размерность одномерного массива C++
Максимальная размерность статического массива C++
размерность массива должна определяться динамически, это как? C++
В с++ нельзя изменять размерность массива? C++
Размерность массива в классе C++
Как определить размерность массива C++
Считывание элементов массива из файла, где в первой строке можно задавать размерность массива C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
M128K145
Эксперт C++
 Аватар для M128K145
8276 / 3495 / 142
Регистрация: 03.07.2009
Сообщений: 10,707
13.11.2009, 21:42     Как поменять размерность массива? #2
Логически изменить размерность можно, но это не будут изменения на уровне реальных изменений выделенной памяти. Сделай просто декремент х и "уменьшишь" размерность массива на 1. Но это только логически, а не физически. Физически изменять размер выделенной памяти нельзя
TheKnyazz
10 / 10 / 1
Регистрация: 27.04.2009
Сообщений: 30
13.11.2009, 21:46     Как поменять размерность массива? #3
А почему бы не сделать просто 2 массив, в который копирнуть все элементы которые будут подходить по условию, не отрицательные, и еще 1 массив в который копирнуть элементы большие n?
Sasuke
 Аватар для Sasuke
0 / 0 / 0
Регистрация: 09.10.2009
Сообщений: 89
13.11.2009, 21:57  [ТС]     Как поменять размерность массива? #4
Цитата Сообщение от M128K145 Посмотреть сообщение
Логически изменить размерность можно, но это не будут изменения на уровне реальных изменений выделенной памяти. Сделай просто декремент х и "уменьшишь" размерность массива на 1. Но это только логически, а не физически. Физически изменять размер выделенной памяти нельзя
А как тогда можно сделать, если не использовать выдиление памяти? Может использовать вариант пользователя TheKnyazz? Но здесь я немного сомневаюсь, ведь задача построена так, что нужно изменить данный массив, с которым работаешь... Хотя условие весьма бедное, одни догадки... но это больше похоже на серьёзное задание..)
rangerx
1919 / 1528 / 139
Регистрация: 31.05.2009
Сообщений: 2,892
13.11.2009, 22:01     Как поменять размерность массива? #5
Используй std::vector(или напиши свой с минимум функций ).
Sasuke
 Аватар для Sasuke
0 / 0 / 0
Регистрация: 09.10.2009
Сообщений: 89
13.11.2009, 22:07  [ТС]     Как поменять размерность массива? #6
rangerx, я понимаю, существуют различные источники в интернете, где можно узнать об std::vector, но я там всё равно ничего не пойму. Не мог ли бы вы мне разъяснить свойства этой функции? И если можно просто пример...
Андрейка
419 / 223 / 27
Регистрация: 25.03.2009
Сообщений: 744
13.11.2009, 22:27     Как поменять размерность массива? #7
C++
1
2
3
4
5
6
7
8
9
10
11
#include <iostream>
#include <algorithm>
#include <vector>
#include <functional>
int main()
{
    int arr[] = {-1,-2,-3,1,2,3};
    std::vector<int>vec(arr,arr+sizeof(arr)/sizeof(*arr));
    std::copy(vec.begin(),std::remove_if(vec.begin(),vec.end(),std::bind2nd(std::less<int>(),0)),std::ostream_iterator<int>(std::cout," "));
    return 0;
}
Добавлено через 2 минуты
если хочешь удалить все больше заданного n то в моём коде вместо std::less<int>() поставь std::greater<int>() и вместо 0 своё заданное n
Sasuke
 Аватар для Sasuke
0 / 0 / 0
Регистрация: 09.10.2009
Сообщений: 89
14.11.2009, 00:26  [ТС]     Как поменять размерность массива? #8
Цитата Сообщение от Sasuke Посмотреть сообщение
if((K=(int*)malloc(x*sizeof(int)))==NULL)
{
cout<<"Ne dostato4no pamyati!\n";
return 1;
Вопрос_1: Я вот по аллегории сочинял эту программу. Скажите, то что я процитировал является выделением памяти?
Вопрос_2: Если я попытаюсь добавить еще два массива, тоже динамических, мне для каждого следует выделять память, ну и освобождать её, соответственно?
TheKnyazz
10 / 10 / 1
Регистрация: 27.04.2009
Сообщений: 30
14.11.2009, 08:52     Как поменять размерность массива? #9
Угу, советую почитать о функции realloc. С ней ты будешь делать 2 массив и потихоньку расширять его по мере надобности, главное с указателями не запутаться. А можно по деревянному. Сначала посчитать количество элементов будущих 2 и 3 массивах, выделять память и копирнуть в них.
Sasuke
 Аватар для Sasuke
0 / 0 / 0
Регистрация: 09.10.2009
Сообщений: 89
14.11.2009, 20:06  [ТС]     Как поменять размерность массива? #10
TheKnyazz , а как это будет выглядеть? Я стараюсь пока не работать с функциями, которые толком не могу понять... realloc относится к ним.
А вот на счёт деревяного способа... Как это выглядит?
1) выделяю память под массив А;
2) заполняю А;
3) делаю вычисления, копирую некоторые объекты А;
4) выделяю память под массив Б, копирую в Б некоторые элементы А;
5) делаю вычисления, копирую некоторые объекты А;
6) выделяю память под массив В, копирую в В некоторые элементы А;
7) освобождаю память для всех массивов.

ТАК? А выделение памяти и освобождение можно слепить в едино?
TheKnyazz
10 / 10 / 1
Регистрация: 27.04.2009
Сообщений: 30
14.11.2009, 23:27     Как поменять размерность массива? #11
1) выделяю память под массив А;
2) заполняю А;
3) делаю вычисления, считаешь количество неотрицательных элементов.
4) выделяешь память под массив b, копируешь в него неотрицательные элементы
5) считаешь количество всех элементов больших числа n
6)выделяешь память под массив c, копируешь в него Все элементы большие числа n
7)теперь у тебя есть 3 массива необходимые для задания, выводишь все поочереди, освобождаешь память, вот собственно и всё)
Слепить получится только освобождение памяти. Выделение никак, ибо ты не знаешь заранее сколько у тебя элементов окажется отрицательными, и сколько элементов больше числа n.Значит не знаешь, сколько надо памяти.
==>>а безразмерные массивы это уже vector и всё такое, предыдущий оратор показывал)
Sasuke
 Аватар для Sasuke
0 / 0 / 0
Регистрация: 09.10.2009
Сообщений: 89
15.11.2009, 00:30  [ТС]     Как поменять размерность массива? #12
Цитата Сообщение от Sasuke Посмотреть сообщение
if((K=(int*)malloc(x*sizeof(int)))==NULL)
{
cout<<"Ne dostato4no pamyati!\n";
return 1;
}
Выделение памяти совершать таким же образом как и впервый раз?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.11.2009, 10:10     Как поменять размерность массива?
Еще ссылки по теме:

C++ Как увеличить размерность массива?
Увеличить размерность массива C++
Правильно задать размерность массива C++
C++ Как правильно задавать размерность массива?
Как хранить размерность массива? C++

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

Или воспользуйтесь поиском по форуму:
TheKnyazz
10 / 10 / 1
Регистрация: 27.04.2009
Сообщений: 30
15.11.2009, 10:10     Как поменять размерность массива? #13
Угу, только х замени на количество элементов нового массива.
Yandex
Объявления
15.11.2009, 10:10     Как поменять размерность массива?
Ответ Создать тему
Опции темы

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