我需要实现需要将字符串保存为元素的循环缓冲区。
我想出了一个下面的原型。但是因为我是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的评论和回答的建议编辑。
答案 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());
}