17 / 18 / 1
Регистрация: 01.12.2010
Сообщений: 296
|
||||||
1 | ||||||
STL, deque, pair31.01.2012, 13:30. Показов 8577. Ответов 60
Метки нет (Все метки)
Здравствуйте, помогите пожалуйста разобраться.
Есть такая очередь:
Как пройтись по всем элементам такой очереди? Как найти минимальный через timeval? // если можно через метод find Как добавить элемент в очередь, и удалить. Можно и пройтись по такой очереди с помощью итератора?
0
|
31.01.2012, 13:30 | |
Ответы с готовыми решениями:
60
Контейнер deque <pair> STL deque STL, deque Перераспределение памяти Как реализован deque в STL ? |
01.02.2012, 02:54 | 21 |
Да. Я даже не смотрел туда.
Память-то не выделена под элементы очереди. Либо resize, либо push_back. На cplusplus посмотрите примеры. Да и условие в цикле странное. Почему через запятую?
1
|
17 / 18 / 1
Регистрация: 01.12.2010
Сообщений: 296
|
||||||
01.02.2012, 02:58 [ТС] | 22 | |||||
потому, что 2 условия
Добавлено через 30 секунд подумал об этом. Вот, вроде получилось:
0
|
01.02.2012, 03:07 | 23 | |||||
Ага. Сравните
Ну вот и ладушки
1
|
17 / 18 / 1
Регистрация: 01.12.2010
Сообщений: 296
|
|
01.02.2012, 03:17 [ТС] | 24 |
Дело в том, что нельзя сделать так:
for(int i = 0, double k = 0.0; ... ...) разные типы, и компилятор вроде не будет понимать, что две переменные разного типа. Вывод при том(5-размер очереди...): точка с запятой там стоит Добавлено через 2 минуты осталось сделать поиск, и заменить дольше всех не использующуюся.
0
|
17 / 18 / 1
Регистрация: 01.12.2010
Сообщений: 296
|
|
01.02.2012, 03:20 [ТС] | 26 |
условия через запятую прописываются.
Подумал... а на while так то не разбить вроде... Придется превращать в одно условие с &&
0
|
01.02.2012, 03:27 | 27 |
Я вам для чего в посте #23 пример привел?
Если лень компилировать и проверять http://liveworkspace.org/code/... 7de82e6b66
1
|
17 / 18 / 1
Регистрация: 01.12.2010
Сообщений: 296
|
||||||
01.02.2012, 03:54 [ТС] | 28 | |||||
дошло...
warning: left operand of comma operator has no effect [-Wunused-value] компилю g++ Добавлено через 18 минут Дело думаю в том, что в 1м случае задается условие для обеих переменных, а во втором для отдельных. пример:
Господи... это еще и разные вещи, у себя не могу исправить.
0
|
01.02.2012, 04:07 | 29 |
Оператор запятая последовательно выполняет выражения слева направо, и возвращает результат крайнего правого выражения.
А цикл у вас неправильно построен. Смысл заводить для dq1 итератор, если там нет ни одного элемента? И k пройдет одну итерацию цикла i, и больше не будет увеличиваться.
1
|
17 / 18 / 1
Регистрация: 01.12.2010
Сообщений: 296
|
|
01.02.2012, 12:14 [ТС] | 30 |
хорошо, я проверю... поможете с поиском?
0
|
01.02.2012, 12:22 | 31 |
Перегружаете < для timeval и используете std::min_element + нужен функтор. Функтор можете взять из кода на первой странице. Ну и перегрузку оттуда можете взять, только ее подправить нужно будет, я же для своего класса реализовывал.
1
|
17 / 18 / 1
Регистрация: 01.12.2010
Сообщений: 296
|
||||||
01.02.2012, 15:12 [ТС] | 32 | |||||
Перегружаю оператор так:
0
|
17 / 18 / 1
Регистрация: 01.12.2010
Сообщений: 296
|
||||||
01.02.2012, 18:50 [ТС] | 34 | |||||
Не могу разобраться, перегружая функтор, какие мы параметры должны передавать ему?
Или полностью можно взять кусок кода?
0
|
17 / 18 / 1
Регистрация: 01.12.2010
Сообщений: 296
|
|
01.02.2012, 19:06 [ТС] | 36 |
Нужно реализовать алгоритм LRU с помощью такой двусторонней очереди(ограниченной по размеру 5 ячеек):
deque<pair<int, timeval> >dq timeval - структура, которая возвращает время с помощью gettimeofday(). Задаем последовательность: 1 2 3 4 5 2 1 2 3 4 3 1 2 3 4 1 2 3 Добавляем в очередь страницы: 1 2 3 4 5 далее страница 2, она есть в памяти удаляем дольше всех не использовавшуюся страницу, на ее место помещаем страницу 2, а ту страницу с 2, которая дублируется, удаляем... (если я правильно понимаю). И так далее. Проблема в том, что я вообще плохо знаю STL. А это хороший вариант как мне кажется(вот бы его реализовать...) И еще, алгоритм LRU, который зарегламентирован, он должен содержать счетчик, тогда хватило бы обычной очереди думаю. Но с gettimeofday мы смотрим по времени обращения... Дошел до того, что нужно в такой очереди найти самое маленькое время.
0
|
3646 / 1378 / 243
Регистрация: 16.04.2009
Сообщений: 4,526
|
||||||
01.02.2012, 19:44 | 37 | |||||
0
|
17 / 18 / 1
Регистрация: 01.12.2010
Сообщений: 296
|
|
01.02.2012, 20:09 [ТС] | 38 |
Нет, не пробовал, ваш код не компилится.
Сейчас попробую, как говорил, soon. Добавлено через 5 минут Получилось сделать(магическим образом), так, как говорил soon...
0
|
17 / 18 / 1
Регистрация: 01.12.2010
Сообщений: 296
|
|
01.02.2012, 20:11 [ТС] | 40 |
Теперь нужно сделать удаление этого минимального элемента...
0
|
01.02.2012, 20:11 | |
01.02.2012, 20:11 | |
Помогаю со студенческими работами здесь
40
Реализовать пользовательский класс Pair (упрощённый аналог std::pair) Как в vector<pair <класс, int> > добавлять свой объект в качестве первого элемента pair? STL std::set, std::pair, std::make_pair Как считать данные в vector<pair<int, pair<int, int>>> arr(m) ? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |