C ++中链接列表的数组

时间:2009-05-10 22:47:41

标签: c++ arrays linked-list

上下文的一些代码:

class WordTable
{
    public:
        WordTable();
        ~WordTable();

        List* GetListByAlphaKey(char key);
        void AddListByKey(char key);
        bool ListExists(char key);
        bool WordExists(string word);
        void AddWord(string word);
        void IncrementWordOccurances(string word);
        void Print();
    private:     
        List *_listArray[33];
        int _GetIndexByKey(char key);
};


class TableBuilder
{
    public:
    TableBuilder();
    ~TableBuilder();
    void AnalyzeStream(fstream &inputStream);        
    void PrintResults();
    private:
        void _AnalyzeCursor(string data);
        bool _WordIsValid(string data);
        WordTable* _WordTable;        
};

struct Element {
public:
   string Word;
   int Occurances;
   Element* Next;
};


class List
{
    public:
        List();
        ~List();

        Element* AddElement(string word);       
        void DeleteElement(Element* element);       
        void Print();       
        void Delete();
        Element* First;
        bool WordExists(string word);
        void IncrementWordOccurances(string word);      
    private:
        void _PrintElementDetails(Element* element);
};

要求
我必须分析文本,构建链表的数组(其中数组包含每个字母的列表;列表包含文本中找到的每个单词),然后打印出结果。

问题 我不能在WordTable.cpp中初始化列表数组。我知道我误解了一些事情,但我没有想法和时间。任何人吗?

P.S。是的,这是一个功课。停止给我关于最佳实践的建议,请......:)

4 个答案:

答案 0 :(得分:4)

_listArray的初始化如下所示:

WordTable::WordTable() {
  for (int i=0; i<33; i++)
    _listArray[i] = new List();
}

你真的没有说出究竟是什么问题所以我不确定这是否有帮助...

答案 1 :(得分:3)

这是因为你正在创建一个指向列表的指针数组。将其更改为List _listArray [33];或者像这样初始化它:

for ( int i = 0; i < 33; ++i ) {
    _listArray[i] = new List();
}

// and to access methods
_listArray[i]->AddElement( "word" );

答案 2 :(得分:3)

看起来您正在通过拥有一个数组来优化您的链接列表,每个字母的第一个字母对应一个。不要那样做。

使用std :: map。字符串是单词,int是你的计数。

编辑:如果你忽略了我的建议......正如已经指出的那样,你的_listArray实际上是一个指针数组,而不是一个对象数组。我想你想要一个对象数组。由于数组是固定长度的,而List有一个默认的构造函数,最简单的方法就是说

List _listArray[33];

如果您想要动态分配,可以改为:

List* _listArray;

在构造函数中:

_listArray = new List[33];

在析构函数中:

delete[] _listArray;

答案 3 :(得分:0)

请不要重新发明轮子(再次) 使用std :: list它可以正常工作,更安全,更标准。

第二:你有设计问题:列表中的元素属性是公共的,但你有一个私有方法???。