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

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

Войти
Регистрация
Восстановить пароль
 
Infinity3000
1058 / 577 / 24
Регистрация: 03.12.2009
Сообщений: 1,255
#1

Шаблонная функция возвращающая созданный динамический массив - C++

21.11.2011, 21:41. Просмотров 1032. Ответов 8
Метки нет (Все метки)

Здравствуйте!

Нужна Ваша помощь!

Нужна шаблонная функция которая возвращает созданный динамический массив, который на 2 элемента больше чем передаваемый и удаляющая передаваемый динамический массив. Сам массив должен содержать все элементы передаваемого массива.

Пока что сделал так, прошу указать на ошибки!

C++
1
2
3
4
5
6
7
8
9
10
11
template <typename T> 
T DinMass(T* mas, int n)
{
    T dinamic = new T [n + 2]; //динамический масив на два элемента больше чем передаваемый(может ни так надо)
    for (int i = 0; i < n; i++)
    {
        dinamic[i] = mas[i]; // элементы из массива mas в наш массив
    }
    delete [] mas; //удаляем передаваемый массив
    return dinamic;
}
Вызов
C++
1
DinMass(a, n);
В чем ошибка??? Спасибо!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.11.2011, 21:41
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Шаблонная функция возвращающая созданный динамический массив (C++):

Шаблонная функция с явной специализацией не возвращает динамический массив - C++
Здравствуйте! Возникла проблема! Есть шаблонная функция с явной специализацией для строк (тип char*), которая должна возвратить...

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

Функция, возвращающая массив - C++
Нужно вернуть из функции массив. int F(int a,int* b) { for(int i=0;i&lt;a;i++) *b++; for(int i=0;i&lt;3;i++) printf(&quot;%d\n&quot;, b); ...

Функция возвращающая массив - C++
Здравствуйте. Для возврата массива возвращаю указатель на него, но вне предела области в которой он был создан память выделенная под массив...

Функция, возвращающая массив - C++
Задача: В двумерном целочисленом массиве заданного размера найти номера строк, элементы которых образуют убявающую последовательность. ...

Функция, возвращающая массив - C++
Возможно ли что функция возвращает массив. Если да то было бы хорошо листинг программы где выполняется такая реализация Спасибо!

8
Сыроежка
Заблокирован
21.11.2011, 21:47 #2
Тип возвращаемого значения должен быть не T, а T *.
И имя переменной должно быть не dinamic, а dynamic
1
Infinity3000
1058 / 577 / 24
Регистрация: 03.12.2009
Сообщений: 1,255
21.11.2011, 22:02  [ТС] #3
Цитата Сообщение от Сыроежка Посмотреть сообщение
И имя переменной должно быть не dinamic, а dynamic
это существенно!)))


Цитата Сообщение от Сыроежка Посмотреть сообщение
Тип возвращаемого значения должен быть не T, а T *.
C++
1
2
3
4
5
6
7
8
9
10
11
12
template <typename T> 
T DinMass(T* mas, int n)
{
    T *dynamic = new T [n]; //динамический масив
    for (int i = 0; i < n; i++)
    {
        dynamic[i] = mas[i];
    }
    delete [] mas;
 
    return *dynamic;
}
Есть также функция для вывода массива в консоль

C++
1
2
3
4
5
6
7
8
template<int n, typename T>
void InitMas(T *mas)      //передача массива
{  
    for(int i = 0; i < n; ++i)
    {
        cout << mas[i] << " "; 
    }
}
вызываю ее так

C++
1
InitMas<n>(a); //выводим целочисленный массив на консоль с помощью шаблонной функции InitMas
Как передать в эту функцию наш созданный динамический массив dynamic??

Добавлено через 1 минуту
Вот так не катит

C++
1
InitMas<n>(dynamic);
0
Сыроежка
Заблокирован
21.11.2011, 22:13 #4
Вы неправильно изменили функцию. Должно быть не

C++
1
2
3
4
5
6
7
8
9
10
11
12
template <typename T> 
T DinMass(T* mas, int n)
{
        T *dynamic = new T [n]; //динамический масив
    for (int i = 0; i < n; i++)
        {
                dynamic[i] = mas[i];
        }
        delete [] mas;
 
        return *dynamic;
}
а

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
template <typename T> 
T * DinMass(T* mas, int n)
{
   T *dynamic = new T [n]; //динамический масив
   for (int i = 0; i < n; i++)
   {
      dynamic[i] = mas[i];
   }
   
   delete [] mas;
 
   return ( dynamic );
}
Добавлено через 3 минуты
Что касается функции

C++
1
2
3
4
5
6
7
8
template<int n, typename T>
void InitMas(T *mas)      //передача массива
{  
        for(int i = 0; i < n; ++i)
        {
                cout << mas[i] << " "; 
        }
}
то сделайте объявление ее параметров одинаковым с предыдущей функции

C++
1
2
3
4
5
6
7
8
template<typename T>
void InitMas( const T *mas, int n )      //передача массива
{  
   for ( int i = 0; i < n; ++i )
   {
      cout << mas[i] << " "; 
   }
}
1
Infinity3000
1058 / 577 / 24
Регистрация: 03.12.2009
Сообщений: 1,255
21.11.2011, 22:17  [ТС] #5
Цитата Сообщение от Сыроежка Посмотреть сообщение
return ( dynamic );
Для чего тут скобки?? Без них тоже в норме вроде работает!

И последнее как вывести содержимое dynamic на консоль из главной функции??
0
Сыроежка
Заблокирован
21.11.2011, 22:21 #6
Цитата Сообщение от Infinity3000 Посмотреть сообщение
Для чего тут скобки?? Без них тоже в норме вроде работает!

И последнее как вывести содержимое dynamic на консоль из главной функции??
Скобки - это стилевое оформление программы.
Вызов функции вывода на консоль совершшенно аналогичен вызову первой функции. То есть указываете имя функции и два аргумента: указатель на созданный массив и его размерность, которая на 2 больше размерности исходного массива.
1
Infinity3000
1058 / 577 / 24
Регистрация: 03.12.2009
Сообщений: 1,255
21.11.2011, 22:41  [ТС] #7
Цитата Сообщение от Сыроежка Посмотреть сообщение
то сделайте объявление ее параметров одинаковым с предыдущей функции
Хочется именно такой вариант!)

C++
1
2
3
4
5
6
7
8
template<int n, typename T>
void InitMas(T *mas)      //передача массива
{  
    for(int i = 0; i < n; ++i)
    {
        cout << mas[i] << " "; 
    }
}

Цитата Сообщение от Сыроежка Посмотреть сообщение
Вызов функции вывода на консоль совершшенно аналогичен вызову первой функции. То есть указываете имя функции и два аргумента: указатель на созданный массив и его размерность, которая на 2 больше размерности исходного массива.
Тут немного не понятно!

сам динамический массив который передает функция нужно присваевать другому массиву созданного в main??

C++
1
2
3
4
int *a = new int [n];
    a = DinMass(a, n);
 
    InitMas<n>(a);
или по другому он передается для вывода??

Не по теме:

Что то вообще не идет сегодня!

0
Сыроежка
Заблокирован
21.11.2011, 22:45 #8
Иожно как у вас, только различие в интерфейсе функций выглядет неестественно.
1
Infinity3000
1058 / 577 / 24
Регистрация: 03.12.2009
Сообщений: 1,255
21.11.2011, 23:01  [ТС] #9
Цитата Сообщение от Infinity3000 Посмотреть сообщение
сам динамический массив который передает функция нужно присваевать другому массиву созданного в main??
другого выхода нет??

Добавлено через 12 минут
Будет так!)

C++
1
2
3
4
int *a = new int [n];
        a = DinMass(a, n);
 
        InitMas<n>(a);
Спасибо, уважаемый Сыроежка!
0
21.11.2011, 23:01
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.11.2011, 23:01
Привет! Вот еще темы с ответами:

Функция возвращающая массив - C++
#include &lt;iostream&gt; #include &quot;conio.h&quot; int *convertToBin() { int a = { 1, 2, 3, 4, 5}; return a; } int...

Функция, возвращающая указатель на двумерный массив - C++
Добрый день! Столкнулся с конструкцией которую раньше не видел, и не до конца понимаю что это и как работает: #include &lt;stdio.h&gt; ...

Функция возвращающая позицию первого вхождения числа в массив - C++
Задача: Написать функцию, которая получает в качестве параметров адрес числового массива данных, его размер и число. Функция...

Функция возвращающая позицию первого вхождения числа в массив - C++
Вот задача: Написать функцию, которая получает в качестве параметров адрес числового массива данных, его размер и число. Функция...


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

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

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