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

标签 c++ c++11 stl

<分区>

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

我想出了一个下面的类原型(prototype)。但由于我是 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;
};

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

我在某处读到过关于 boost 循环缓冲区的内容,但这对我来说不是一个选项。

根据 Martin zhai 在他的评论和回答中的建议进行编辑。

最佳答案

一些看法:

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());
}

关于c++ - 下面的字符串循环缓冲区实现有哪些可能的改进?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42827301/

相关文章:

c++ - "for (const auto &s : strs) {} "是什么意思?

c++ - ImportError : dynamic module does not define init function, 但确实如此

C++流负数转换

c++ - 如何使形状沿着贝塞尔曲线 SFML 移动?

c++ - 我可以安全地将指向 const 成员的指针转换为相同类型但非常量吗?

c++11 - Foreach 在特征矩阵上循环?

c++ - 如何从控制台读取空格分隔的数字?

c++ - 遍历 vector 会导致错误,但标准 for 循环不会

c++ - 初始化列表 std::pair

c++ - 如何从字符串中删除特定的子字符串?