I持ってこのようないくつかの配列(特定の名前を無視してください):C:削除する要素の中間配列と以前のポインタが動作している
static resource_t coap_cmp_res[MAX_CMPS];
e.g. [cmp1,cmp2,cmp3,cmp4,cmp5,0,0,0]
例えば、これらの要素を使用するコード、coap_cmp_res [4]( cmp5)がRESTリソースに関連付けられている場合は、Res5とします。ある時点で
、私は位置でその配列の要素を削除するには、次のようにxは:私は、やりたい何
rest_deactivate_resource(&coap_cmp_res[x]);
e.g. for x = 2
[cmp1,cmp2,0,cmp4,cmp5,0,0,0]
この
のように、再び単一の連続配列を持っていますe.g. [cmp1,cmp2,cmp4,cmp5,0,0,0,0]
私は現在、やることは次のとおりです。
for(UInt8 i = x; i < MAX_CMPS; i++){
coap_cmp_res[i] = coap_cmp_res[i+1];
}
which gives [cmp1,cmp2,cmp4,cmp5,cmp5,0,0,0]
その後、私は手動で最後の非ゼロエルを設定0
e.g. [cmp1,cmp2,cmp4,cmp5,0,0,0,0]
にementだから、これはよさそうだが、問題はRes5がまだcoap_cmp_resに関連付けられていることである[4]ので、今、私が望むものではない代わりにCMP5の値が0、、。
配列内のxの後にあるすべてのリソースを非アクティブ化して再度アクティブにして、関連付けを再度行うことができますが、これについてもっと効率的な方法があるかどうか疑問に思っていました。 うまくいけば、これは理にかなっています。
私は本当に配列の中でより効率的な方法を知っていませんが、あなたはデータ表現を変更することができれば、多分リンクされたリストはこれをより良くすることができます。 – encryptoferia
ちょうど作成したフリースポットに配列の最後の要素を置き、最後の要素への参照をすべて更新することはできませんか? 各要素への参照が1つしかない場合は、非常に高速です... – yakoudbz
値の配列の代わりに、ポインタの配列を使用します。次に、配列要素を指す代わりに、同じポインタを持つ他の変数を持つことができます。 – Barmar