2016-09-04 10 views
0

特定の要件には固定サイズの文字列タイプが必要です。今のところ私はこの要求を満たすために単純なchar[20]文字の配列を行ってきました。しかし、それは私が今必要としている特定のstlのコンテナに優しい特性が欠けています。たとえば、単純なempty()の場合は、かなり頻繁にlength/sizeプロパティまたはgetSize()メソッドを必要とするメソッドまたは '/ 0'を管理できないメソッドが必要な場合は、clear()メソッドが必要です。実際のサイズではなく、コンテナを満たす文字列のサイズ。固定サイズ文字列型コンテナ

私はこれをすべて再実装できることを知っていますし、将来的には時間がかかるかもしれませんが、今のところこれを達成する別の方法がありますか?

+1

'std :: string'について説明しました。 –

+0

@SamVarshavchik固定サイズではありません。例えば ​​'std :: vector'と' std :: array' –

+0

文字列のサイズを変更する 'clear()'のようなメソッドを持たせたい場合、 "固定サイズ"を使うことはできません。例えば、固定サイズの 'std :: array'が必要な場合、固定サイズの配列を持っていますか?clear()、empty()などはありません。可変長文字列、別名 'std :: string'です。 –

答えて

2

私は、小さな文字列をインプレースで保持し、それにアクセスする際にヒープとインダイレクションの割り当てを避けることを前提としています。その場合は、Boostのsmall_vectorをご覧ください。

typedef boost::container::small_vector<char> small_string; 

これは、必要な文字列として機能します。

更新:標準C++ライブラリの多くの実装では、std::stringの小さな文字列最適化(SSO)が使用されているようです。これは、文字列が十分に小さい(たとえば、64ビットアーキテクチャでは22文字)限り、インプレースに格納されることを意味します。標準std::stringを使用することを強くお勧めします。

+0

どこでSSOの詳細を読むことができますか?私の文字列は最大8〜10文字ですが、32ビットと64ビットの両方のシステムをサポートする必要があります。 –

+0

見つけました - あなたの答えとリンクすることができます:http://stackoverflow.com/a/21710033/4785903 –

関連する問題