Сообщение Re: LRU cache, предложения и замечания от 15.04.2019 22:50
Изменено 15.04.2019 23:00 rg45
Re: LRU cache, предложения и замечания
Здравствуйте, kaa.python, Вы писали:
KP>Для собственных нужд накидал LRU-cache, который вроде делает то, что мне нужно и так как мне нужно. Но так как я не часто пишу на C++ именно что библиотеки, а в то же время написание библиотек вообще сильно оттедельный навык, у меня есть некоторые сомнения в том, что все реализовано в соответствии с современными веяниями. Сам кеш тут, минимальный поддерживаемый стандарт C++11. Буду благодарен за дополнения и замечания
Сильно вдумчиво не изучал, но глаз зацепился вот за этот фрагмент кода: ты повторно форвардишь key. Это не есть хорошо, поскольку после первого же раза от объекта может остаться один только панцирь. Ну и еще, я бы в подобном случае для реализации итератора использовал бы boost::iterator_adaptor — писанины меньше и результат надежнее.
KP>Для собственных нужд накидал LRU-cache, который вроде делает то, что мне нужно и так как мне нужно. Но так как я не часто пишу на C++ именно что библиотеки, а в то же время написание библиотек вообще сильно оттедельный навык, у меня есть некоторые сомнения в том, что все реализовано в соответствии с современными веяниями. Сам кеш тут, минимальный поддерживаемый стандарт C++11. Буду благодарен за дополнения и замечания
_list.emplace_front( std::forward<key_type>( key ),
std::forward<value_type>( value ) );
_map.emplace( std::forward<key_type>( key ), _list.begin() );
Сильно вдумчиво не изучал, но глаз зацепился вот за этот фрагмент кода: ты повторно форвардишь key. Это не есть хорошо, поскольку после первого же раза от объекта может остаться один только панцирь. Ну и еще, я бы в подобном случае для реализации итератора использовал бы boost::iterator_adaptor — писанины меньше и результат надежнее.
Re: LRU cache, предложения и замечания
Здравствуйте, kaa.python, Вы писали:
KP>Для собственных нужд накидал LRU-cache, который вроде делает то, что мне нужно и так как мне нужно. Но так как я не часто пишу на C++ именно что библиотеки, а в то же время написание библиотек вообще сильно оттедельный навык, у меня есть некоторые сомнения в том, что все реализовано в соответствии с современными веяниями. Сам кеш тут, минимальный поддерживаемый стандарт C++11. Буду благодарен за дополнения и замечания
Сильно вдумчиво не изучал, но глаз зацепился вот за этот фрагмент кода: ты повторно форвардишь key. Это не есть хорошо, поскольку после первого же раза от объекта может остаться один только панцирь. Ну и еще, я бы в подобном случае для реализации итератора использовал бы boost::iterator_adaptor — писанины меньше и результат надежнее.
P.S. Я не очень удачно выразился. Проблема, собственно, не в повторном форвардинге, а в том, что после форвардинга объект еще как-то используется.
KP>Для собственных нужд накидал LRU-cache, который вроде делает то, что мне нужно и так как мне нужно. Но так как я не часто пишу на C++ именно что библиотеки, а в то же время написание библиотек вообще сильно оттедельный навык, у меня есть некоторые сомнения в том, что все реализовано в соответствии с современными веяниями. Сам кеш тут, минимальный поддерживаемый стандарт C++11. Буду благодарен за дополнения и замечания
_list.emplace_front( std::forward<key_type>( key ),
std::forward<value_type>( value ) );
_map.emplace( std::forward<key_type>( key ), _list.begin() );
Сильно вдумчиво не изучал, но глаз зацепился вот за этот фрагмент кода: ты повторно форвардишь key. Это не есть хорошо, поскольку после первого же раза от объекта может остаться один только панцирь. Ну и еще, я бы в подобном случае для реализации итератора использовал бы boost::iterator_adaptor — писанины меньше и результат надежнее.
P.S. Я не очень удачно выразился. Проблема, собственно, не в повторном форвардинге, а в том, что после форвардинга объект еще как-то используется.