2017-03-16 19 views
0

文字列を要素として保持する必要がある循環バッファを実装する必要がありました。以下の文字列循環バッファ実装の改善点は何ですか?

私は以下のクラスのプロトタイプを用意します。しかし、私は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

は、あなたが仕事を表示するコードを実行してください?コードレビューのみが必要ですか?それから、http://codereview.stackexchange.com/ –

+0

@Someprogrammerdudeコードが動作しているのを尋ねる方がいいでしょう。私はコードレビューをしたいだけではありませんが、もし利用可能であれば、より良い代替ソリューションについて知りたいと思います。 – JagsVG

+0

'add_element_to_circular_buffer'と' check_if_elem_present_in_circular_buffer'の名前を 'add_elem'と' elem_exist'に変更することができました。 –

答えて

2

いくつかの意見:あなただけcheck_if_elem_present_in_circular_buffer()でそれを使用するので

1.itrは、クラスのメンバーである必要はありません。

あなたはクラス定義で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()); 
}