首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

C++ vector 存儲自定義類指針:正確聲明、插入與遍歷

     編輯:程式設計綜合問答

錯誤代碼

vector m_node;           // 缺少模板參數
vector GetNode();        // 返回值類型不完整
m_node.push_back(node);  // node 為 Node*,類型匹配但語法錯誤

正確聲明

#include <vector>
using namespace std;

class Node {
public:
    Node() : x(0) {}
    void SetX(int v) { x = v; }
    int GetX() const { return x; }
private:
    int x;
};

class Test {
    vector<Node*> m_nodes;  // 存指針
public:
    void Add(Node* node) { m_nodes.push_back(node); }
    const vector<Node*>& GetNodes() const { return m_nodes; }  // 返回引用避免拷貝
};

使用示例

int main() {
    Test t;
    for (int i = 0; i < 10; ++i) {
        Node* n = new Node();
        n->SetX(i);
        t.Add(n);
    }

    for (Node* n : t.GetNodes()) {
        cout << n->GetX() << endl;
    }

    // 釋放內存
    for (Node* n : t.GetNodes()) delete n;
    return 0;
}

關鍵點總結

  1. vector<Node*> — 模板參數必須是 Node*。
  2. 返回 const vector<Node*>& — 引用避免拷貝,const 防止外部修改容器結構。
  3. 內存所有權:Test 析構時需遍歷釋放,或用 unique_ptr (C++11) 自動管理:vector<unique_ptr<Node>>。
  4. 遍歷用範圍 for:for (auto* n : vec) 簡潔安全。

現代 C++ 改寫 (C++11)

class Test {
    vector<unique_ptr<Node>> m_nodes;
public:
    void Add(unique_ptr<Node> node) { m_nodes.push_back(std::move(node)); }
    const vector<unique_ptr<Node>>& GetNodes() const { return m_nodes; }
    // 無需手動 delete,Test 析構自動釋放
};
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved