0

以下に定義されているノードのリンク リストがあるとします。

C++ コード

struct node {
    node *next;
    int i ;
};

次のポインターを構造体の最初のメンバー変数にすることに利点はありますか?

人々は上記のアプローチでこれを試していると思います(ここで間違っているかもしれません)

node n, m;
*n=&m;

上記が正しい場合、上記のようにコーディングするのは正しいですか。正しい方法は何ですか?

4

2 に答える 2

1

次のポインターを構造体の最初のメンバー変数にすることに利点はありますか?

ゼロ オフセット メンバからのロードおよびゼロ オフセット メンバへの書き込みでアセンブリ命令のサイズを削減することで、非常に小さなパフォーマンス上の利点が得られますが、仮想テーブルを持たないクラスでのみです (vtbl は省略された最初のメンバです)。

スコープ/グローバル割り当てリストを事前に作成する場合は、その要素を前述のように初期化できます。

あなたはそれを試すことができます:

struct node {
    struct node* next;
    int i;
};

node z = {0}, c={&z}, b={&c}, a={&b};
node * stack = &a;

「Linux カーネル リンク リスト」を検索すると、お気に入りリストに関する非常に役立つ情報を見つけることができます。

私は現在、c++ テンプレートを使用して「侵入型ノード」汎用コンテナーの独自の設計に取り組んでいます。おそらく、この質問は興味深いと思われるかもしれません

于 2013-05-08T17:05:01.377 に答える