Форум программистов, компьютерный форум, киберфорум
Наши страницы

STL, deque, pair - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Ошибка iostream.h http://www.cyberforum.ru/cpp-beginners/thread438520.html
Установил Visual Studio 2008 и при компиляции ошибка с iostream.h #include <iostream.h> // (тоже самое если заменить на "iostream.h") Ошибка 1 fatal error C1083: Не удается открыть файл...
C++ Обработать строку так, чтобы чтобы в ней остались только те слова которые содержат буквы и цифры Привет всем, помогите решить задачу. Обработать строку таким образом чтобы чтобы в ней остались только те слова которые содержат буквы и цифры. Заранее спасибо. http://www.cyberforum.ru/cpp-beginners/thread438489.html
Экономия памяти или борьба с точками. (что-то типа массива ссылок хотелось бы иметь) C++
У меня есть объект Point. И есть Объект Grup. В объекте Grup я выделил динамически память под массив объектов типа Point. Чтоб, как бы Группа точек содержала в себе эти самые точки. Но проблема в...
как поставить EOF? C++
Ребят, подскажите пожалуйста. Итак, вот листинг программы. Если я открываю файл, созданный с помощью потока, все читается без проблем(я так понимаю, символ EOF ставится автоматически). Если же я...
C++ Двумерный масив. Экзамен ребята http://www.cyberforum.ru/cpp-beginners/thread438460.html
Дан масив A . Записать в масив числа так чтобы на главной диагонали были записаны 1 , а на остальных 0. Язык С++. Заранее благодарю !
C++ Не могу найти ошибку Вот сама задача: Создайте свою версию библиотечной функции strcmp(s1, s2), которая срав¬нивает две строки и возвращает -1, если s1 идет нерпой по алфавиту, О, если в s1 и s2 одинаковые значения, и... подробнее

Показать сообщение отдельно
Visary_Master
-154 / 16 / 4
Регистрация: 01.12.2010
Сообщений: 297
02.02.2012, 11:53  [ТС]
Цитата Сообщение от soon Посмотреть сообщение
Говорил же "пересмотрите цикл"
Да, это единственный выход... просто сонный был, уже сталкивался с этим, когда проще простую целочисленную переменную использовать.

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

Добавлено через 1 час 41 минуту
Теперь проблемы с логикой...

Не знаю, как правильно построить алгоритм...

Добавлено через 53 минуты
Код
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
#include <iostream>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <sys/time.h>
#include <deque>
#include <algorithm>
#include <utility>
#include <cstdlib>
using namespace std;
 
ostream& operator << (ostream& s, const timeval& tv)
{
    s << tv.tv_sec << ' ' << tv.tv_usec;
    return s;
}
 
bool const operator < (const timeval& tv1, const timeval& tv2)
{
    return tv1.tv_sec < tv2.tv_sec;
}
 
template <class T>
struct Comp
{
    bool operator () (const T& f, const T& l)
    {
        return f.second < l.second;
    }
};
 
int main()
{
    int n = 10;
    int *array = new int[n];
    int mem_size = 5;
    int access_num; // переменная для доступа к памяти
    
    cout << "Введите кол-во обращений к страницам памяти: " << endl;
    cin >> access_num;
    
    cout << "Введите последовательность обращения к страницам: " << endl;
    for(int it = 0; it < access_num; it++)
        cin >> array[it]; 
 
    // LRU - дольше всех не использовавшаяся
    int k = 0;
    deque<pair<int, timeval> > dq1;
    timeval tv;
    for (int i = 0; i < access_num; ++i)
    {
         for(int k = 0; k < mem_size; ++k) 
         {
            if (i<mem_size)
            {
                gettimeofday(&tv, NULL);
                dq1.push_back(pair<int, timeval>(array[i], tv));
                break;
            }
            else
            {
                deque<pair<int, timeval> >::iterator min = min_element(dq1.begin(), dq1.end(), Comp<pair<int, timeval> >());
                dq1.erase(min);
                gettimeofday(&tv, NULL);
                dq1.push_back(pair<int, timeval>(array[i], tv));
                break;
            }
         }
    }
    cout << endl;
    // выводим очередь пар
    for (deque<pair<int, timeval> >::iterator it = dq1.begin(); it != dq1.end(); ++it)
        cout << it->first << ' ' << it->second << endl;
   
   cout << endl;
   // ищем пару с минимальным временем
   deque<pair<int, timeval> >::iterator min = min_element(dq1.begin(), dq1.end(), Comp<pair<int, timeval> >());
        cout << min->first << ' ' << min->second << endl;
 
    cout << endl;
    
    delete [] array;
    return 0;   
}


Вроде получилось, теперь нужно как-то зная где есть такая же страница обновлять время у нее и не добавлять ее... это нужно думаю в else сделать.

Добавлено через 31 секунду
А то, получается FIFO.

Добавлено через 2 минуты
Еще, такая ошибка возникает, когда больше страниц, чем в mem_size вводишь:

lab7_2.out: malloc.c:3096: sYSMALLOc: Assertion `(old_top == (((mbinptr) (((char *) &((av)->bins[((1) - 1) * 2])) - __builtin_offsetof (struct malloc_chunk, fd)))) && old_size == 0) || ((unsigned long) (old_size) >= (unsigned long)((((__builtin_offsetof (struct malloc_chunk, fd_nextsize))+((2 * (sizeof(size_t))) - 1)) & ~((2 * (sizeof(size_t))) - 1))) && ((old_top)->size & 0x1) && ((unsigned long)old_end & pagemask) == 0)' failed.
Добавлено через 2 часа 51 минуту
Думаю, алгоритм, как-то так должен выглядеть. Проблема в том, что нужно повторяющемся страницам обновлять время, и одну из них не добавлять....

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
#include <iostream>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <sys/time.h>
#include <deque>
#include <algorithm>
#include <utility>
#include <cstdlib>
using namespace std;
 
ostream& operator << (ostream& s, const timeval& tv)
{
    s << tv.tv_sec << ' ' << tv.tv_usec;
    return s;
}
 
bool const operator < (const timeval& tv1, const timeval& tv2)
{
    return tv1.tv_sec < tv2.tv_sec;
}
 
template <class T>
struct Comp
{
    bool operator () (const T& f, const T& l)
    {
        return f.second < l.second;
    }
};
 
int main()
{
    int n = 10;
    int *array = new int[n];
    int mem_size = 5;
    int access_num; // переменная для доступа к памяти
    
    cout << "Введите кол-во обращений к страницам памяти: " << endl;
    cin >> access_num;
    
    cout << "Введите последовательность обращения к страницам: " << endl;
    for(int it = 0; it < access_num; it++)
        cin >> array[it]; 
 
    // LRU - дольше всех не использовавшаяся
    int k = 0;
    deque<pair<int, timeval> > dq1;
    timeval tv;
    for (int i = 0; i < access_num; ++i)
    {
         for(int k = 0; k < mem_size; ++k) 
         {
            if (i<mem_size)
            {
                gettimeofday(&tv, NULL);
                dq1.push_back(pair<int, timeval>(array[i], tv));
                break;
            }
            else
            {
                deque<pair<int, timeval> >::iterator min = min_element(dq1.begin(), dq1.end(), Comp<pair<int, timeval> >());
                cout << "First min: " << min->second << endl;
                if (array[i] != min->first)
                {
                    gettimeofday(&(min->second), NULL);
                    cout << "second min: " << array[i] << " " << min->first << " " << min->second << endl;
                    break;
                }
                else
                {
                    dq1.push_back(pair<int, timeval>(array[i], tv));
                    dq1.erase(min);
                    break;
                }
                break;
            }
         }
    }
    cout << endl;
    
    // выводим очередь пар
    for (deque<pair<int, timeval> >::iterator it = dq1.begin(); it != dq1.end(); ++it)
        cout << it->first << ' ' << it->second << endl;
    cout << endl;
    
    delete [] array;
    return 0;   
}
Добавлено через 9 часов 53 минуты
upppp!
0
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.