Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Шаблоны, шаблоны функций, шаблоны классов 
V
    Опции темы
try_to_get
  Дата 22.7.2007, 19:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 426
Регистрация: 19.3.2007
Где: Россия

Репутация: нет
Всего: 2



Что такое шаблоны?
Что из себя представляют шаблоны функций и шаблоны классов?
Кому не трудно напишите, в общем, и кратко выше указанные вопросы.
 smile



--------------------
Алгоритм не роскошь, а средство достижения цели!
user posted image
PM MAIL   Вверх
Daevaorn
Дата 22.7.2007, 19:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2155
Регистрация: 29.11.2004
Где: Москва

Репутация: нет
Всего: 70



PM MAIL WWW   Вверх
try_to_get
Дата 22.7.2007, 21:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 426
Регистрация: 19.3.2007
Где: Россия

Репутация: нет
Всего: 2



Thanks!  smile 


--------------------
Алгоритм не роскошь, а средство достижения цели!
user posted image
PM MAIL   Вверх
dimanwv
Дата 30.3.2012, 08:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 30.3.2012

Репутация: нет
Всего: нет



такой вопрос. 
template <typename T>
void show(const char *msg,vector<T> vect)
{
    cout<<msg;
    for(unsigned i=0;i<vect.size();++i)
        cout<<vect[i]<<" ";
    cout<<"\n";
}
vector<int> copied(5);
show<int>("Vector have been sorted :",copied);// здесь в угловых скобках указываем тип.
///////////////////////////////////////////////////////////
template<typename InIter>
void show_range(const char* msg,InIter start,InIter end)
{
    InIter itr;
    cout<<msg;
    for(itr=start;itr!=end;++itr)
        cout<<*itr<<" ";
    cout<<endl;
}
vector<double> trans_v;
    for(trans_i=0;trans_i<10;++trans_i)
        trans_v.push_back(static_cast<double>(trans_i));
    cout<<"The demonstration \"transform\" algorithm using one vector.\n";
    show_range("The initial content of \"trans_v\" is :\n",trans_v.begin(),trans_v.end());//здесь в не применяем угловые скобки почему?
PM MAIL   Вверх
borisbn
Дата 30.3.2012, 10:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 21
Всего: 135



dimanwv, для функций почти никогда не нужно указывать тип инстанцирования явно. А вот для классов - обязательно. Компилятор сам "сообразит" какой тип ты имел в виду. Если же тип не подойдёт, то компилятор ругнётся, как, впрочем, если ты явно укажешь несоответствующий тип.
Кстати, в твоём случае для функции show необязательно указывать тип.
http://liveworkspace.org/code/96f0209d9264...328424664f8c7d7


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
dimanwv
Дата 30.3.2012, 23:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 30.3.2012

Репутация: нет
Всего: нет



Спасибо. Понял.
PM MAIL   Вверх
sergioK1
Дата 31.3.2012, 12:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 417
Регистрация: 30.1.2011

Репутация: нет
Всего: нет



Цитата(borisbn @ 30.3.2012,  09:08)

Кстати, в твоём случае для функции show необязательно указывать тип.
http://liveworkspace.org/code/96f0209d9264...328424664f8c7d7

1) где разница между двумя примерами  ?

2) зачем тут вообще template ? 
         

Код

  #include <iostream>
 #include <vector>
 using namespace std;


void show(const char *msg,vector<void*> vect)
{
    cout<<msg;
    for(unsigned i=0;i<vect.size();++i)
        cout<<vect[i]<<" ";
    cout<<"\n";
}

int main() {
  vector<void*> copied(5);
  show("Vector have been sorted :",copied);
}


PM MAIL   Вверх
boostcoder
Дата 31.3.2012, 12:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 20
Всего: 110



Цитата(sergioK1 @  31.3.2012,  12:11 Найти цитируемый пост)
1) где разница между двумя примерами  ?

2) зачем тут вообще template ? 

ты в танке?
почему твой код не работает?: http://liveworkspace.org/code/c46ca9cff008...faba34b20f0d13f
PM WWW   Вверх
sergioK1
Дата 31.3.2012, 13:02 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 417
Регистрация: 30.1.2011

Репутация: нет
Всего: нет



Цитата(boostcoder @ 31.3.2012,  11:25)
Цитата(sergioK1 @  31.3.2012,  12:11 Найти цитируемый пост)
1) где разница между двумя примерами  ?

2) зачем тут вообще template ? 

ты в танке?
почему твой код не работает?: http://liveworkspace.org/code/c46ca9cff008...faba34b20f0d13f

мой работает,  твое изменение - нет ,  хочешь добавить чего пользуй  визитор ,


не совсем точьно выразился,  в таких случаях лучше пользовать void* а в самой функции делать фактори на тип ,
 так багу в перегруженом << поймать легче, ну и размер кода поменьше 

xм .. может у меня привычка многолетняя  из других языков без шаблонов писать (там их просто небыло) 
но мне кажеться она хорошая , шаблоны они несколько для другого 

Но это уже  не для новичков, раздела парадигмы програмирования на форуме к сожалению нет , а это 
для туда классика IMHO.






PM MAIL   Вверх
borisbn
Дата 31.3.2012, 13:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 21
Всего: 135



sergioK1, функция show из первого примера умет распечатывать любой вектор, элементы которого умеет принимать оператор << ostream'а
Даже из таких элементов
Код

struct MyStruct {
    int i;
    std::string s;
    MyStruct() : i( 42 ), s( "Hi, sergioK1!" ) {}

    friend std::ostream & operator<<(  std::ostream & os, const MyStruct & p ) {
        os << "{ i: " << p.i << "; s: " << p.s << " }";
        return os;
    }
};

http://liveworkspace.org/code/4faa30d01377...8e006daac2e2a39


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
sergioK1
Дата 31.3.2012, 13:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 417
Регистрация: 30.1.2011

Репутация: нет
Всего: нет



Цитата(borisbn @ 31.3.2012,  12:16)
sergioK1, функция show из первого примера умет распечатывать любой вектор, элементы которого умеет принимать оператор << ostream'а

Я о другом 

Кстати, в твоём случае для функции show необязательно указывать тип.
http://liveworkspace.org/code/96f0209d9264...328424664f8c7d7 


запутался  smile 
какой прмер первый , какой второй ?

где он указан и где можно не указать ?

Это сообщение отредактировал(а) sergioK1 - 31.3.2012, 13:30
PM MAIL   Вверх
boostcoder
Дата 31.3.2012, 14:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 20
Всего: 110



sergioK1, ты когда-нибудь перестанешь на всех форумах рунета постить бессмысленные вопросы?

PM WWW   Вверх
borisbn
Дата 31.3.2012, 17:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 21
Всего: 135



sergioK1, действительно, сумбур какой-то...

Цитата(sergioK1 @  31.3.2012,  13:27 Найти цитируемый пост)
где он указан и где можно не указать ?

Можно не указывать тип практически всегда. Компилятор сам разберётся какой тип нужен.
Вот вариант, когда тип нужно указывать явно
http://liveworkspace.org/code/b2ce6674e590...b979d7270dc493d


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
sergioK1
Дата 31.3.2012, 18:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 417
Регистрация: 30.1.2011

Репутация: нет
Всего: нет




 дайте ссылку на стандард языка, только не на последний, 

Это сообщение отредактировал(а) sergioK1 - 31.3.2012, 19:41
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.2302 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.