2016-07-15 21 views
0

私は頻繁に私のプロジェクトでスライス構造を使用します。C/C++には標準のスライスコンテナがありますか?

struct SSlice { 
    void *pData; 
    size_t length; 
}; 

また、私は他のプロジェクトは、ワット/(...などRocksDB、MDB、など)をコピーOデータを操作するために同様のコンテナを使用して参照してください。そのようなコンテナを持つ標準(またはOS関連の)ヘッダーがあることを知っている人はいますか? STLでは、Linuxのヘッダーは関係ありません。

UPD。私の言及したプロジェクトにおけるそのようなコンテナの主な目的は、それをコピーしないでデータを扱うことです。例えば。私はURIパスやLDAP DNを解析し、それをスライスのベクトルとして表現します。

+2

[コアガイドライン](https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md)は、これを達成するための「span」テンプレートの存在を推奨しています。 –

+1

'C/C++'は[未定義の動作](https://en.wikipedia.org/wiki/Undefined_behavior)です。 を参照してください。 –

+0

'std :: vector'のようなSTLコンテナは、' std :: move'を正しく使うと** **それを行います。そうでない場合でも、コンテナへのポインタを使用して、「データをコピーせずにデータを処理する」という効果を得ることができます。私は、あなたが達成したいと思うものにもっと具体的にする必要があると思います。 – nwp

答えて

4

C++標準ライブラリでは、イテレータと長さ(begin、length)ではなく、一連のイテレータ(begin、end)を使用するのがより一般的です。ポインタはより一般的な概念であるイテレータのケースです。

範囲には標準構造はなく、というスライスもありません。標準インターフェースは、beginとendを別々のオブジェクトとして扱います。

しかし、範囲の追加はproposedであり、technical specificationが存在します。これはすでに一部の標準ライブラリ実装でサポートされている可能性があります。少なくともしない一般に†

、そのコンテンツにsliceインターフェースを提供する特別なstd::valarray容器があります。

1

std::string_viewは、std::stringのような機能を持つ文字の範囲の非所有ビューです。これは、とりわけ、鳴き声を速めることを目的としています。

spanおよびarray_viewは、コンセプトにも合致していますが、文字列推定ではないさまざまな標準化およびプロト標準化の取り組みの名前です。

関連する問題