std::vector を使用した C でのメモリの再割り当て
C では、メモリの再割り当ては長い間議論されてきました。 realloc 関数を提供する C とは異なり、C はメモリの割り当てと割り当て解除のために new と delete を提供しますが、明示的な再割り当て関数は提供しません。
これに対処するために、多くの C プログラマーは古いものを削除するという面倒なプロセスに頼ってきました。ポインタを削除して新しいポインタを割り当てると、断片化やパフォーマンスの非効率につながる可能性があります。ただし、標準ライブラリ コンテナーを使用した、より効率的で最新のソリューションがあります: std::vector.
Relocating a Buffer with std::vector
To reallocate a C のバッファでは、 std::vector コンテナを使用できます。次の C のコード スニペットを考えてみましょう:
Type* t = (Type*)malloc(sizeof(Type)*n) memset(t, 0, sizeof(Type)*m)
。これは、Type 型の n 要素にメモリを割り当て、それらを 0 に初期化します。これは、次の C コードに置き換えることができます:
std::vector<Type> t(n, 0);
これにより、Type 型の n 要素を持つベクトル t が作成され、それらが 0 に初期化されます。
Vector
ベクトルのサイズを変更するには、resize メンバー関数を使用できます。たとえば、t のサイズを n2 に増やすには、次のコマンドを使用します。
t.resize(n2);
これは、C の realloc 関数を使用するのと同じです。
関数にベクトルを渡す
ベクトルを関数に渡したい場合は、構文 t.data() を使用できます。基になる配列へのポインタを取得します。これは、C で割り当てられたメモリにポインタを渡すのと似ています。例:
Foo(t.data())
結論
std::vector を使用すると、効率的で最新のアプローチが得られます。 C でのメモリの再割り当て。これにより、手動でメモリを削除して割り当てる必要がなくなり、サイズ変更操作が簡素化され、ベクトルを関数に簡単に渡すことができます。
以上がstd::vector は C のメモリ再割り当ての課題をどのように解決しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。