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

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

Войти
Регистрация
Восстановить пароль
 
Андрей2011
29 / 23 / 2
Регистрация: 18.01.2011
Сообщений: 359
#1

Указатель на 2мерный массив в функцию - C++

20.11.2012, 09:29. Просмотров 449. Ответов 9
Метки нет (Все метки)

Добрый день, уважаемые. Столкнулся вот с какой проблемой.
Хотелось бы отправлять в функцию указатель на свой 2х мерный массив чтоб после ее отработки массив содержал данные. На сайтах много примеров исполняющих подобное действо, но я так и не смог добиться положительных результатов((
Пришел к выводу что лучше использовать
C++
1
 vector < int > >
указатель на который можно в функцию послать, но как корректно посылать указатель и заполнять его и считывать в виде этого вектора...не понятно.
В общем просьба помочь разобраться в вопросе.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.11.2012, 09:29     Указатель на 2мерный массив в функцию
Посмотрите здесь:

C++ Как передать в функцию указатель на двумерный массив заранее неизвестного размера?
2мерный массив C++
C++ 2мерный массив
C++ создать функцию, в качестве параметра которой передается указатель на массив целых чисел
C++ создать функцию, в качестве параметра которой передается указатель на массив целых чисел.
C++ Процедурный тип на функцию содержащую указатель на массив
2мерный массив C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
extenup
53 / 53 / 3
Регистрация: 12.11.2011
Сообщений: 109
20.11.2012, 11:24     Указатель на 2мерный массив в функцию #2
Вот накидал 2 функции. В первой (fill_array) вектор передаётся по ссылке, во второй (fill_array_2) по указателю. После чего они там заполняются значениями и заполненными возвращаются в главную функцию.

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>
#include <vector>
using namespace std;
 
void fill_array(vector<int> &arr);
void fill_array_2(vector<int> *arr);
int main()
{
    vector<int> arr;
    fill_array(arr);
    // или
    fill_array_2(&arr);
 
    for(int i = 0; i < 10; i++)
        cout << arr[i] << " ";
 
    cout << endl;
    return 0;
}
void fill_array(vector<int> &arr)
{
    for(int i = 0; i < 10; i++)
        arr.push_back(i);
}
void fill_array_2(vector<int> *arr)
{
    for(int i = 0; i < 10; i++)
        arr->push_back(i);
}
Андрей2011
29 / 23 / 2
Регистрация: 18.01.2011
Сообщений: 359
20.11.2012, 13:29  [ТС]     Указатель на 2мерный массив в функцию #3
Это же не двухмерный массив
extenup
53 / 53 / 3
Регистрация: 12.11.2011
Сообщений: 109
20.11.2012, 14:18     Указатель на 2мерный массив в функцию #4
Цитата Сообщение от Андрей2011 Посмотреть сообщение
Это же не двухмерный массив
Теперь двухмерный. Когда массив больше не будет нужен, надо пройтись во всем элементам массива и удалить их через оператор delete, чтобы память не утекла.

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
#include <iostream>
#include <vector>
using namespace std;
 
void fill_array(vector<vector<int>*> &arr);
int main()
{
    vector<vector<int>*> arr;
    fill_array(arr);
 
    for(int i = 0; i < 10; i++)
    {
        for(int j = 0; j < 10; j++)
        {
            cout << (*arr[i])[j] << " ";
        }
        cout << endl;
    }
 
    cout << endl;
    return 0;
}
 
void fill_array(vector<vector<int>*> &arr)
{
    int c = 0;
    for(int i = 0; i < 10; i++)
    {
        arr.push_back(new vector<int>());
        for(int j = 0; j < 10; j++)
        {
            arr[i]->push_back(c);
            c++;
        }
    }
}
Андрей2011
29 / 23 / 2
Регистрация: 18.01.2011
Сообщений: 359
20.11.2012, 15:56  [ТС]     Указатель на 2мерный массив в функцию #5
а ведь работает!!! )) Большое спасибо, уважаемый, extenup, вы мне очень помогли.

Добавлено через 1 минуту
а как корректно удалять не подскажете?
extenup
53 / 53 / 3
Регистрация: 12.11.2011
Сообщений: 109
20.11.2012, 16:03     Указатель на 2мерный массив в функцию #6
Можно добавить в конец функции main

C++
1
for(int i = 0; i < arr.size(); i++) delete arr[i];
I.M.
564 / 547 / 5
Регистрация: 16.12.2011
Сообщений: 1,389
20.11.2012, 16:16     Указатель на 2мерный массив в функцию #7
extenup,
C++
1
vector<vector<int>> arr;
двумерный вектор без всяких делейтов в конце
extenup
53 / 53 / 3
Регистрация: 12.11.2011
Сообщений: 109
20.11.2012, 16:28     Указатель на 2мерный массив в функцию #8
Цитата Сообщение от I.M. Посмотреть сообщение
vector<vector<int>> arr;
двумерный вектор без всяких делейтов в конце
Можете написать рабочий пример двумерного вектора без динамического выделения памяти?
I.M.
564 / 547 / 5
Регистрация: 16.12.2011
Сообщений: 1,389
20.11.2012, 16:32     Указатель на 2мерный массив в функцию #9
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
void fill_array(vector<vector<int>> &arr)
{
    int c = 0;
    for(int i = 0; i < 10; i++)
    {
        arr.push_back(vector<int>());
        for(int j = 0; j < 10; j++)
        {
            arr[i].push_back(c);
            c++;
        }
    }
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.11.2012, 16:54     Указатель на 2мерный массив в функцию
Еще ссылки по теме:

C++ Как правильно передать в функцию указатель на двумерный массив?
Правильно ли передан указатель на массив структур в функцию? C++
C++ Написать функцию, которая принимает указатель на небольшой 2х мерный массив int значениями
C++ В функцию передается несколько целых чисел. Создать из всех параметров динамический массив и вернуть указатель
C++ В функцию через указатель передаётся массив ТОЛЬКО с первым[0] элементом

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

Или воспользуйтесь поиском по форуму:
Андрей2011
29 / 23 / 2
Регистрация: 18.01.2011
Сообщений: 359
20.11.2012, 16:54  [ТС]     Указатель на 2мерный массив в функцию #10
Хм. боюсь, что уважаемый, I.M., прав. Получилось и без динамического выделения памяти. Впрочем и тот и другой вариант полезны. Спасибо!!
Yandex
Объявления
20.11.2012, 16:54     Указатель на 2мерный массив в функцию
Ответ Создать тему
Опции темы

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