LINUX.ORG.RU

Помогите с заданием

 


0

2

Привет уже 3 дня парю мозги над заданием. Реализуйте шаблонную версию класса Array. Список всех операций, которые должен поддерживать класс Array, приведен в шаблоне кода.

Sample Input: There are no tests for this task Sample Output: OK

вот собственно мой код

#include <cstddef>

template <typename T>
class Array
{
   
    
    public:
   
    explicit Array(size_t size = 0, const T& value = T()) :size_(size), dat(new T[size])  
    {
    // const T * dp= &value ;     
         
     for (size_t i = 0; i<size; ++i)
     {
      dat[i]= value;
     }
      
         
    }
   
    Array(const Array & a)
      {
          size_=a.size();
          dat= new T [size_];
         for (size_t i = 0; i<size_; ++i)
          dat[i]= a.dat[i];
      }
 
    
        Array& operator=(const  Array  &  a ) 
        { 
            
           delete [] dat;
            size_=a.size() ;
             dat=new T [size_];
               for (size_t i = 0; i<size_; ++i)
     {
     dat[i]= a.dat[i];
     }
        
       return * this;
        }
          
       
       size_t size() const 
       {
         return size_ ; 
       }
          
    
    
      T& operator[](size_t iter)
      {
        return dat[iter];
      
      }
 
 
      const T& operator[](size_t iter) const
     {
        return dat[iter];
      
      }
   ~Array()
    {
    delete []  dat;
    }
    
    private:
 size_t size_;
  T * dat;
    
};

Ошибка: Failed test #1. Wrong answer Input: There are no tests for this task Your output: NO Correct output: OK

Помогите пожалуйста понять что у меня неправильно!



Последнее исправление: Azzazzel (всего исправлений: 1)

Текст на stepic похож. Там же в комментариях можно и спросить.

Вообще код вяглядит рабочим (хотя форматирование ужасно). Может оно просто не компилируется, например, в таком случае:

class Class
{
public:
    Class(int) {}
};

int
main()
{
    Class c = 1;
    Array<Class> a(10, c);
}

Если дело действительно в этом, то решение можно посмотреть здесь, но сначало стоит попробовать сделать самому. А вообще спросить со ссылкой на номер решения в комментариях к курсу, они подскажут, что не так.

xaizek ★★★★★
()
Array& operator=(const  Array  &  a ) 
{      
    if(this == &a) {
        return * this;
    }
    delete [] dat;
    size_=a.size() ;
    dat=new T [size_];
    for (size_t i = 0; i<size_; ++i)
    {
        dat[i]= a.dat[i];
    }   
    return * this;
}
Nietzsche
()
Ответ на: комментарий от rupert

Оно то так, но похоже, что задача учебная. Было бы глупо не использовайть stl-контейнеры и городить велосипед, при этом использовав алгоритмы. Хотя... зависит от задачи.

Nietzsche
()
Ответ на: комментарий от xaizek

Да ето на степике)!

На Ideone у меня всё работает и те тесты котоые я придумал проходит. Ну а на степике нет(

Azzazzel
() автор топика

попробуй поставить проверку на size==0 в конструкторах и в операторе =. есл ноль, просто зануляй дату. у них там на степике тесты своеобразные отчасти. и, как уже советовали, в = проверяй на this.

зы. следующий тест с placement new куда как интереснее =)

conalex ★★★
()
Последнее исправление: conalex (всего исправлений: 2)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.