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

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

Восстановить пароль Регистрация
 
Infinity3000
 Аватар для Infinity3000
1057 / 576 / 24
Регистрация: 03.12.2009
Сообщений: 1,255
21.11.2011, 21:41     Шаблонная функция возвращающая созданный динамический массив #1
Здравствуйте!

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

Нужна шаблонная функция которая возвращает созданный динамический массив, который на 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);
В чем ошибка??? Спасибо!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.11.2011, 21:41     Шаблонная функция возвращающая созданный динамический массив
Посмотрите здесь:

Функция возвращающая массив C++
C++ функция возвращающая массив
C++ Шаблонная функция
[C++] Шаблонная функция с явной специализацией не возвращает динамический массив C++
C++ функция возвращающая массив
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Сыроежка
Заблокирован
21.11.2011, 21:47     Шаблонная функция возвращающая созданный динамический массив #2
Тип возвращаемого значения должен быть не T, а T *.
И имя переменной должно быть не dinamic, а dynamic
Infinity3000
 Аватар для Infinity3000
1057 / 576 / 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);
Сыроежка
Заблокирован
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] << " "; 
   }
}
Infinity3000
 Аватар для Infinity3000
1057 / 576 / 24
Регистрация: 03.12.2009
Сообщений: 1,255
21.11.2011, 22:17  [ТС]     Шаблонная функция возвращающая созданный динамический массив #5
Цитата Сообщение от Сыроежка Посмотреть сообщение
return ( dynamic );
Для чего тут скобки?? Без них тоже в норме вроде работает!

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

И последнее как вывести содержимое dynamic на консоль из главной функции??
Скобки - это стилевое оформление программы.
Вызов функции вывода на консоль совершшенно аналогичен вызову первой функции. То есть указываете имя функции и два аргумента: указатель на созданный массив и его размерность, которая на 2 больше размерности исходного массива.
Infinity3000
 Аватар для Infinity3000
1057 / 576 / 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);
или по другому он передается для вывода??

Не по теме:

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

Сыроежка
Заблокирован
21.11.2011, 22:45     Шаблонная функция возвращающая созданный динамический массив #8
Иожно как у вас, только различие в интерфейсе функций выглядет неестественно.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.11.2011, 23:01     Шаблонная функция возвращающая созданный динамический массив
Еще ссылки по теме:

Функция, возвращающая массив C++
C++ Функция возвращающая массив
C++ Функция, возвращающая указатель на двумерный массив

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

Или воспользуйтесь поиском по форуму:
Infinity3000
 Аватар для Infinity3000
1057 / 576 / 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);
Спасибо, уважаемый Сыроежка!
Yandex
Объявления
21.11.2011, 23:01     Шаблонная функция возвращающая созданный динамический массив
Ответ Создать тему
Опции темы

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