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

Массив: каким образом можно изменить размер многомерного массива - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Ввести x,y и в зависимости от того что введено - вывести 0 , 1 , или 2 http://www.cyberforum.ru/cpp-beginners/thread819289.html
Помогите сделать задачку...в зависимости какой будет х и y выводится на екран число. Я думал мб вот так, но не получается, выводит постоянно 1 и 2: #include <iostream.h> #include <conio.h> int main() { int x,y,c; cout<<"X: "; cin>>x;
C++ Создание дерева Возникли трудности при создании дерева. Ниже предоставил свои наработки, но как доделать не могу понять. Помогите разобраться. #include <stdio.h> #include <Windows.h> #include <time.h> /*Моя структура*/ struct tree { http://www.cyberforum.ru/cpp-beginners/thread819287.html
C++ Список. Дописать в начало элементы, которые входят в L1, но не входят в L2...
Cформировать список L из элементов, которые входят одновременно в списки L1 и L2. Дописать в начало элементы, которые входят в L1, но не входят в L2, а в конец - элементы, которые входят в L2, но не входят в L1
Открытие файлов через консоль C++
возможно ли открыть через консоль текстовый файл в формате док чтобы его содержимое не на консоль вывело а через ворд обычно открыло??
C++ загрузить в програму изображения формата jpg и получить доступ к каждому пискселю http://www.cyberforum.ru/cpp-beginners/thread819278.html
Весь вопрос в заголовке темы) надеюсь что подскажеет в какую сторну копать)
C++ Ошибка в преобразованиях двумерного массива (для решения СЛАУ) Пишу прогу которая решает уравнение методом простых итераций,не дойдя собственно до самого метода обнаружил ошибку, при преобразовании матрицы по диагонали должны нули быть,но их почему то нет,в чем ошибка не могу понять,вроде формулы преобразования правильно записал,помогите пожалуйста,Прошу прощения за быдлокод #include <iostream> #include <conio.h> #define N 3 using namespace std; void... подробнее

Показать сообщение отдельно
Olivеr
411 / 407 / 13
Регистрация: 06.10.2011
Сообщений: 830
26.03.2013, 20:11     Массив: каким образом можно изменить размер многомерного массива
Цитата Сообщение от Shaman163 Посмотреть сообщение
как же всё таки создать массив с заранее неизвестной размерностью
Одномерный:
C++
1
2
3
4
5
6
    size_t arr_size = 100;
    int *arr = new int[arr_size];
    //...
    arr[0] = 0;
    //...
    delete arr;
Двумерный:
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
    unsigned col_count = 3; //количество столбцов
    int **dyn_arr = new int*[col_count];
 
    unsigned str_count = 2; //кол-во строк
 
    for (size_t i = 0; i!=col_count; i++)
        dyn_arr[i] = new int[str_count]; //создаем столбцы
 
    //dyn_arr[str][col] - используем вот такую запись
 
    dyn_arr[0][0] = 1;
    dyn_arr[0][1] = 2;
    dyn_arr[0][2] = 3;
 
    dyn_arr[1][0] = 4;
    dyn_arr[1][1] = 5;
    dyn_arr[1][2] = 6;
 
    for (size_t i = 0; i!=str_count; i++,cout<<endl)
        for (size_t j = 0; j!=col_count; j++)
            cout<<dyn_arr[i][j]<<"\t";
 
    for (size_t i = 0; i!=col_count; i++)
        delete[] dyn_arr[i]; //удаляем из дин. памяти
 
    delete[] dyn_arr;//удаляем
Добавлено через 1 минуту
Цитата Сообщение от Shaman163 Посмотреть сообщение
каким образом можно изменить размер многомерного массива???
и меня этот вопрос интересует. ничего на ум, кроме как создавать новый массив с нужной размерностью и заливать в него элементы, не приходит. нужна какая-нибудь функция урезания памяти...

Добавлено через 2 минуты
Погуглил и нашел несколько решений:
C++
1
2
3
4
5
int * pArray = new int[10];
void resize(size_t newSize)
{
    int * pArray = (int *) realloc(pArray, newSize);
}
C++
1
2
3
4
5
6
7
8
9
10
void resize() {
    size_t newSize = size * 2;
    int* newArr = new int[newSize];
 
    memcpy( newArr, arr, size * sizeof(int) );
 
    size = newSize;
    delete [] arr;
    arr = newArr;
}
И то о чем я говорил:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
int size = 10;
int* arr = new int[size];
 
void resize()
{
   int* resize_arr = new int[size + 1];
   for(int i = 0; i < size; i++)
        resize_arr[i] = arr[i];
 
   size++;
   arr = resize_arr;
   delete[] resize_arr;
}
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru