2016-06-15 3 views
0

Я хотел добавить к узлам в моей переменной списка, которая содержит время, прошедшее с начала программы. К несчастью, все они получили то же самое. Что не так в моем коде?Почему все элементы в моем списке имеют одинаковое время создания?

void MyList:: pushBack(val nval) 
{ 
    if (size == 0) 
    { 
     first->elem = nval; 
     first->time = ((clock()/(double)(CLOCKS_PER_SEC)) * 1000); 
     size++; 
     return; 
    } 
    Node *n = new Node(); 
    n->time= ((clock()/(double)(CLOCKS_PER_SEC)) *1000); 
    n->elem = nval; 
    last->next = n; 
    last = n; 
    size++; 
// delete n; 

} 
    struct Node { 
    double time; 
    val elem; 
    Node *next=nullptr; 
}; 

class MyList 
{ 
    int size = 0; 
    Node* first; 
    Node* last = first; 
MyList(); 
void pushBack(val nval); 
~MyList(); 
}; 
+2

Возможно, что-то не так, что ваш компьютер exteremly fast ** или ---> ** вы просто просите кого-то отладить его для вас –

+0

Пожалуйста, отредактируйте вопрос и добавьте код, который добавит элементы. – kebs

+0

В зависимости от вашей платформы 'clock()' вероятно, возвращает время CPU, а не фактическое время. Кроме того, его разрешение довольно низкое. – interjay

ответ

6

Почему все элементы в моем списке есть в то же время создания?

Вы используете

((clock()/(double)(CLOCKS_PER_SEC)) * 1000); 

, чтобы получить значение переменной time члена. Это время в миллисекундах. Сегодняшние компьютеры могут много работать за миллисекунду. Время, затрачиваемое на создание всех объектов, оказывается меньше миллисекунды. Вот почему вы видите то же значение time для всех ваших объектов.

Если разрешение clock больше миллисекунды, вы увидите то же значение time для большего количества объектов.

+0

Это правдоподобное объяснение. –

+2

Фактическое разрешение 'clock', вероятно, даже хуже, чем миллисекунда. – interjay

Смежные вопросы