С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.53/15: Рейтинг темы: голосов - 15, средняя оценка - 4.53
 Аватар для EfimKR
57 / 30 / 13
Регистрация: 24.06.2014
Сообщений: 255
Записей в блоге: 1

Есть функция которая добавляет элемент типа int в конец массива. Как ее переделать через шаблон

12.08.2014, 16:15. Показов 3417. Ответов 12
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть функция которая добавляет элемент типа int в конец массива. Как ее переделать через шаблон, чтобы можно было добавлять элементы в массивы любых типов.

Вот сама функция.

C++
1
2
3
4
5
6
7
8
 int* add_element_array(int * a, int& n)
 {int b=input_number("new element");
 if (!n){a=new int[++n];*a=b;return a;}
  int *c=new int[++n];
  for(int i=0;i<n-1;*(c+i)=*(a+i),i++);
  c[n-1]=b;delete[]a;
  return c;
 }

C++
1
2
3
4
 int input_number(char* ms)
{cout<<"input "<<ms <<" = "; char st[10];
 cin.getline(st,10); return atoi(st);
}
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
12.08.2014, 16:15
Ответы с готовыми решениями:

Составить функцию Add2End, которая добавляет элемент E в конец списка
Я студент 1-го курса Информатики, впервые начал изучение языка C, до этого экспериментировал немного на Java, поэтому возникли некоторые...

Описать рекурсивную функцию или процедуру, которая добавляет новый элемент Е в конец списка L
Описать рекурсивную функцию или процедуру, которая добавляет новый элемент Е в конец списка L

Функция, которая вставляет в конец стека новый элемент
Помогите пожалуйста, не получается(

12
Модератор
Эксперт С++
 Аватар для zss
13771 / 10964 / 6491
Регистрация: 18.12.2011
Сообщений: 29,241
12.08.2014, 16:57
Лучший ответ Сообщение было отмечено EfimKR как решение

Решение

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
template<class T>
T input_number(char* ms)
{
     cout<<"input "<<ms <<" = "; 
     T t;cin>>t;
     return t;
}
template<class T>
T* add_element_array(T * a, int& n)
 {
     T b=input_number<T>("new element");
     if (n==0){a=new T[++n];*a=b;return a;}
     T *c=new T[++n];
     for(int i=0;i<n-1;i++)
                  c[i]=a[i];
     c[n-1]=b;
     delete[]a;
     return c;
 }
1
267 / 189 / 33
Регистрация: 15.01.2011
Сообщений: 681
12.08.2014, 17:00
примерно так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
//*.h
template < typename T , typename A>
void add_element_array( T * pt, A& array)
{
    //контейнер должен иметь функцию push_back()
    if( pt )
        array.push_back(pt);
}
 
//**.cpp
#include...
 
int main(int argc, char *argv[])
{
    std::vector<int *> vcpi; 
    int * pi = new int;
    *pi = 100500;
    add_element_array<int , std::vector<int *>>(pi,vcpi);
        //или  add_element_array(pi,vcpi);
        return 0;
}
1
 Аватар для EfimKR
57 / 30 / 13
Регистрация: 24.06.2014
Сообщений: 255
Записей в блоге: 1
12.08.2014, 18:26  [ТС]
zss, я тоже до этого пришёл.

Добавлено через 37 минут
zss, можно ещё один вопрос?

Есть некоторая функция, которая создает динамический массив. Её аргументами есть ссылка на указатель и размер массива.
C++
1
void input_array(int *&a, int& n);
Можно ли как-то сделать, чтобы она могла возвращать указатели на массивы разных типов (int, double)?
0
В астрале
Эксперт С++
 Аватар для ForEveR
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
12.08.2014, 18:43
EfimKR,
C++
1
2
template<typename T>
void input_array(T *&a, int& n)
1
 Аватар для EfimKR
57 / 30 / 13
Регистрация: 24.06.2014
Сообщений: 255
Записей в блоге: 1
12.08.2014, 21:07  [ТС]
ForEveR, таким образом можно реализовать чтобы функция сама создавала динамический массив разных типов (int, double)?
Если да, то как?
0
Модератор
Эксперт С++
 Аватар для zss
13771 / 10964 / 6491
Регистрация: 18.12.2011
Сообщений: 29,241
13.08.2014, 08:52
На этот вопрос уже был ответ
Цитата Сообщение от zss Посмотреть сообщение
T *c=new T[++n]; // создание массива типа T
...
1
 Аватар для EfimKR
57 / 30 / 13
Регистрация: 24.06.2014
Сообщений: 255
Записей в блоге: 1
13.08.2014, 15:28  [ТС]
zss, проблема в том, что какой тип создаваемого массива мы не знаем. Он создается в функции и заполняется целыми или веществ. числами, а потом возвращается указатель на него. Также возможно, что элементы массива будут заполнены повторно. То-есть сначала он был заполнен целыми, а потом веществ., потом опять целыми и т.д. Реально вообще такое сделать?

Была идея сделать все массивы веществ., когда же попадался бы массив в котором должны быть целые, просто вывести только его целую часть. Но показалось решение кустарным.
0
В астрале
Эксперт С++
 Аватар для ForEveR
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
13.08.2014, 16:00
Цитата Сообщение от EfimKR Посмотреть сообщение
проблема в том, что какой тип создаваемого массива мы не знаем. Он создается в функции и заполняется целыми или веществ. числами, а потом возвращается указатель на него.
Это-то да. Но функция откуда-то ведь вызывается. Вот там мы уже ДОЛЖНЫ знать тип.
0
В астрале
Эксперт С++
 Аватар для ForEveR
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
13.08.2014, 16:00
Цитата Сообщение от EfimKR Посмотреть сообщение
проблема в том, что какой тип создаваемого массива мы не знаем. Он создается в функции и заполняется целыми или веществ. числами, а потом возвращается указатель на него.
Это-то да. Но функция откуда-то ведь вызывается. Вот там мы уже ДОЛЖНЫ знать тип.
0
 Аватар для EfimKR
57 / 30 / 13
Регистрация: 24.06.2014
Сообщений: 255
Записей в блоге: 1
13.08.2014, 17:58  [ТС]
ForEveR, то-есть присвоить тип в функции нельзя?
Например объявив указатель на воид и присвоить ему возвращенный результат?
0
В астрале
Эксперт С++
 Аватар для ForEveR
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
14.08.2014, 09:55
EfimKR, Можно. А как вы будете узнавать какой именно тип был введен? И главный вопрос, зачем?
0
 Аватар для EfimKR
57 / 30 / 13
Регистрация: 24.06.2014
Сообщений: 255
Записей в блоге: 1
14.08.2014, 16:50  [ТС]
ForEveR, есть задача: программа предлагает на выбор закон заполнения массива. Некоторые законы заполняют целыми, некоторые веществ. числами. Вот и хотел это реализовать в функции. Притом чтобы была возможность повторного заполнения массива.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
14.08.2014, 16:50
Помогаю со студенческими работами здесь

Есть ли стандартная функция приведения переменной типа String к типу int?
Подскажите, пожалуйста, есть ли стандартная функция приведения переменной типа String к типу int? Или её руками нужно писать? Не хотелось...

Напишите перегруженную функцию power (), которая принимает два целочисленных параметра типа int и возвращает целочисленное значение типа int
Операции над целыми числами осуществляются быстрее, чем над числами с плавающей точкой. Напишите перегруженную функцию power (), ...

Написать шаблон функции для вывода в обратном порядке массива типа int и double
Есть массив, нужно вывести его в обратном порядке

Есть переменная типа char содержащая цифру; как записать это значение в переменную типа int?
Пожалуйста, напомните стандартную функцию

Как в двумерном массиве типа int задать конкретный элемент типа string
Подскажите пожалуйста, мне нужен массив чисел размерностью 12 на 2. Но при этом мне нужно обозвать первую колонку например...


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
Первый деплой
lagorue 16.01.2026
Не спеша развернул своё 1ое приложение в kubernetes. А дальше мне интересно создать 1фронтэнд приложения и 2 бэкэнд приложения развернуть 2 деплоя в кубере получится 2 сервиса и что-бы они. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит токи на L и напряжения на C в установ. режимах до и. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru