下面的字符串循环缓冲区实现有哪些可能的改进?

时间:2017-03-16 07:01:31

标签: c++ c++11 stl

我需要实现需要将字符串保存为元素的循环缓冲区。

我想出了一个下面的原型。但是因为我是c ++的新手,我认为应该有更好的东西来达到同样的目的。

以下是类定义。

class circular_buffer {
    public:
        circular_buffer( int count ) : size( count ), index( 0 )
        {
            v.resize( size );
        }

        void add_element( const char* elem )
        {
            v[index] = elem;
            index = ( index + 1) % size;
        }

        bool is_element_exist( const char * elem )
        {
            auto itr = find_if( v.begin(), v.end(), [elem](string &o) { return o == elem; } );
            return ( itr != v.end() )
        }

    private:
        int size;
        int index;
        std::vector<std::string> v;
};

有没有更好的解决方案?上述设计是否有任何改进的机会?

我读过有关增强循环缓冲区的内容,但这对我来说不是一个选项。

按照Martin zhai的评论和回答的建议编辑。

1 个答案:

答案 0 :(得分:2)

一些意见:

1。 itr不需要是类成员,因为您只需在check_if_elem_present_in_circular_buffer()中使用它。

您可以在类定义中删除itr,并在函数中通过以下方式声明它:

auto itr = find_if( v.begin(), v.end(), [elem](string &o) { return o == elem; } );

2。 check_if_elem_present_in_circular_buffer()可以简化:

bool check_if_elem_present_in_circular_buffer( const char * elem )
{
    auto itr = find_if( v.begin(), v.end(), [elem](string &o) { return o == elem; } );
    return (itr != v.end());
}