Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Вызов метода параметра шаблона в дефалтовом аргументе  (Прочитано 8548 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Mayor
Специалист

ru
Offline Offline

« : 09-09-2009 16:07 » new

Вызов метода параметра шаблона в дефалтовом аргументе.

Как заменить:
Код:
template<class T> void heapify(T& v,size_t i,size_t s=0) {
// size_t s=v.size()-1;
if(!s) s=v.size()-1;

на
Код:
template<class T> void heapify(T& v,size_t i,size_t s=v.size()-1) {

« Последнее редактирование: 14-09-2009 10:38 от Sel » Записан

1n c0de we trust
Антон (LogRus)
Глобальный модератор

ru
Offline Offline
Пол: Мужской
Внимание! Люблю сахар в кубиках!


WWW
« Ответ #1 : 10-09-2009 02:54 » 

никак, если v.size() не известен на этапе компиляции, а если известен, то вроде можно.
Записан

Странно всё это....
Mayor
Специалист

ru
Offline Offline

« Ответ #2 : 10-09-2009 10:42 » 

жаль, попробовал встроить s в T, как-то вроде еще кривее получилось:
Код:
#include <iostream>
using std::cout;
using std::cin;
using std::endl;
#include <vector>
using std::vector;

template<class T> void swap(T& a,T& b){
T t=a;
a=b;
b=t;
}
template<class T> void heapify(T& v,size_t i) {
// if(!s) s=v.size()-1;
if(i*2>v.s) return;
if(i*2==v.s) {
if (v[i]<v[i*2]) swap(v[i],v[i*2]);
return;
}
size_t max=i*2;
if(v[max]<v[max+1]) max++;
if(v[i]<v[max]) {
swap(v[i],v[max]);
heapify(v,max);
}
}
template<class T> void make_heap(T& v){
v.s=v.size()-1;
for(size_t i=v.s/2;i>0;i--) heapify(v,i);
}
template<class T> void heap_sort(T& v) {
//T& n=*(new T);
//while(v.size()>0);
// v.s=v.size()-1;
make_heap(v);
while(v.s>1) {
swap(v[1],v[v.s--]);
heapify(v,1);
}
return ;
}

template<class  T> class heap_vector: public vector<T> {
public:
size_t s;
heap_vector(size_t ss=0):s(ss){
this->push_back(0);
}
};

int main(){
while(cin) {
//vector<int> vi;
heap_vector<int> vi;
int i=0;
while(cin>>i && i) vi.push_back(i);
// make_heap(vi);
heap_sort(vi);
for(size_t i=0;i<vi.size();i++) cout<<vi[i]<<"\t";
cout<<endl;
vi.clear();
}
}

может как-то можно избежать вставления в vector еще 1й переменной?

такой синтаксис подойдет для возвращения ссылки на итератор?
T& n=*(new T);
Записан

1n c0de we trust
Антон (LogRus)
Глобальный модератор

ru
Offline Offline
Пол: Мужской
Внимание! Люблю сахар в кубиках!


WWW
« Ответ #3 : 14-09-2009 03:29 » 

до красиво тебе еще расти и расти, шаблоны тут совершенно не причём.

1. что это? что оно должно делать?
2. не слишком хорошая идея наследоваться от вектора

Код:
T& n=*(new T); 
подумай о последствиях
Записан

Странно всё это....
Mayor
Специалист

ru
Offline Offline

« Ответ #4 : 26-09-2009 15:31 » 

каких последствиях?

а кстати, как n удаляется\высвобождается? когда из области видимости выходит?
Записан

1n c0de we trust
Finch
Спокойный
Администратор

il
Offline Offline
Пол: Мужской
Пролетал мимо


« Ответ #5 : 26-09-2009 16:07 » 

n спокойно удалится. А вот будет течь памяти того объекта, который создан в new T. Ты просто потеряеш к нему доступ. Так как ссылки на него не будет.
Записан

Не будите спашяго дракона.
             Джаффар (Коша)
Mayor
Специалист

ru
Offline Offline

« Ответ #6 : 26-09-2009 18:18 » 

delete n;

на него сработает?
Записан

1n c0de we trust
Finch
Спокойный
Администратор

il
Offline Offline
Пол: Мужской
Пролетал мимо


« Ответ #7 : 26-09-2009 18:38 » 

Пробуй Улыбаюсь
Вот простой пример:
Код:
class A
{
   public:
      A() {}
      ~A() {}
   private:
      int at;
};

int main()
{
   A &a=*(new A());
   //delete a;
}
valgrind говорит
Цитата
==13574== LEAK SUMMARY:
==13574==    definitely lost: 4 bytes in 1 blocks.
==13574==      possibly lost: 0 bytes in 0 blocks.
==13574==    still reachable: 0 bytes in 0 blocks.
==13574==         suppressed: 0 bytes in 0 blocks.

В данном случае, a и то что создано в new A() это два разных экземпляра.
« Последнее редактирование: 26-09-2009 18:41 от Finch » Записан

Не будите спашяго дракона.
             Джаффар (Коша)
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines