2012-06-03 50 views
2

我正在寫作業,想知道這是什麼真正定義爲:C++清單和指針

list <NAME> * m_ofList 

凡的名字來自一個struct像這樣:

typedef struct name 
{ 
    int age; 
    int height; 
} NAME; 

我想知道這是什麼,所以我知道如何插入或訪問它:push_back,insert,

所以我現在明白這一點,但由於某種類型的內存訪問而卡住了:它產生了分段錯誤,我一直無法弄清楚。 我需要在哪裏初始化我的新列表?它在構造函數或函數中不起作用。僅供參考,它是一個私人列表,因此它只能用於成員函數(即m_ofList)。我可以產生代碼,如果任何人想幫助...

+0

請告訴我們'list < NAME > * m_ofList'和那個'struct'不是來自教你C++的人嗎? – Johnsyweb

+1

您使用它:列表 m_ofList。沒有必要把它變成一個指針並將它打破。 – SuperSaiyan

+2

爲什麼'typedef struct for C++? – SuperSaiyan

回答

6

假設using namespace stdusing std::list,這是一個指向類/結構名稱的對象的列表。爲了把對象在它,首先你需要將其初始化:

m_ofList = new list<NAME>; 

或:

m_ofList = &(some already initialized list of NAME objects); 

然後你就可以將商品放入它:

NAME x; 
x.age = 15; 
x.height = 150; 
m_ofList->push_back(x); 
m_ofList->insert(m_ofList->begin(), x); 

如果用動態分配去與new列表,它需要妥善處理完畢後:

delete m_ofList; 

我的問題是,爲什麼它是一個指針?你可以像這樣聲明它(你應該這樣):

list<Name> m_ofList; 

然後你就不用擔心它的處置了。它將由範圍規則來處理。

+4

+1建議遠離指針。 :) – SuperSaiyan

+0

,但是,我得到一個EXC_BAD_ACCESS當我初始化它(使用Xcode)或一個seg錯誤11與unix ...你能解釋一下嗎? –

+0

@BrianKnowlton:我需要看到一個更完整的例子。優選地,完全完成。 –

0

這是一個STL list這是變量,結構或對象的鏈接列表。它支持插入,刪除任何位置的操作。list <NAME> * m_ofList m_oflist是一個指向Name對象列表的指針。這裏是一個很好的教程STL list

1

無論您選擇在列表中保存的數據類型如何,成員函數都將保持不變。
有關您可以爲STL列表容器調用哪些成員函數的文檔可以找到here
您可以創建包含任何數據類型的列表,因爲它們是使用稱爲模板的結構構建的。模板可以讓你創建不同數據類型的列表。
實施例:

#include <list> 
#include <string> 
#include <cstdlib> 


int main(){ 

    //here is a list that can only hold integers 
    std::list<int> list1{1,2,3,4,5}; 

    //here is a list that can only hold characters 
    std::list<char> list2{'a','b','c','d','e'}; 

    //we can create a new type to represent a person 
    struct person{ 
     std::string name; 
     int age; 
     int height; 

     person(std::string const& name_, int const& age_, int const& height_): 
     name(name_), age(age_) ,height(height_){} 
    }; 

    //and now that we have a new person type, we can create a list to hold people 
    std::list<person> list3{{"John",21,70},{"Jane",20,68}}; 

    return EXIT_SUCCESS; 
} 

使用g ++編譯-std =的C++ 0x -o主要主。cpp