C でのセット要素の変更の影響
反復子を使用して std::set の要素を変更すると、基になる要素の動作に関する懸念が生じる可能性がありますデータ構造。
要素の結果変更
MSDN ドキュメントによると、セットに格納されている値を直接編集することは強く推奨されません。値を変更すると、次の理由から予測できない動作が発生する可能性があります。
未定義の動作の例
次の仮定の例を考えてみましょう:
std::set mySet = {1, 2, 3};
auto it = mySet.find(1);
// Modify the value stored in the set
*it = 4;
このシナリオでは、変更された要素 (値 4) は、赤黒ツリー内で無効な位置になります。その結果、セットに対する後続の検索操作が失敗するか、間違った結果が返される可能性があります。
結論
std::set オブジェクトの整合性を維持するには、次のことが重要です。保存された値の直接変更を避けるため。代わりに、既存の要素を削除し、適切なデータ順序を確保し、未定義の動作を防ぐために、必要な値を持つ新しい要素を挿入します。
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3