arrayList <string>问题</string>

时间:2011-02-01 21:03:40

标签: c++ string

这是arrayList类:

template<class T>
class arrayList: public linearList<T> 
{

public:
    // constructor, copy constructor and destructor
    arrayList(int initialCapacity = 10);
    arrayList(const arrayList<T>&);
    ~arrayList() {
        delete[] element;
    }

void insert(int theIndex, const T& theElement);
protected:
    T* position;
}; // end of iterator class

protected:
    // additional members of arrayList
    void checkIndex(int theIndex) const;
    // throw illegalIndex if theIndex invalid
    T* element; // 1D array to hold list elements
    int arrayLength; // capacity of the 1D array
    int listSize; // number of elements in list
};

dict2读取文件并将单词存储在arrayList中。我使用rrayList<char[10]>,但如何将这些输入到文件中的arrayList中?错误在上面的main()函数中指出。

主要是:

在主要功能中,它具有以下内容。

arrayList<char[10]> *dict1 = new arrayList<char[10]> (1000);

int k = 0;
while (getline(fin, str)) {
    dict1->insert(k, str.c_str()); // error here
    k++;
}

reverseArray(dict2); // error here

修改

在这种情况下我应该使用arrayList<string>

2 个答案:

答案 0 :(得分:2)

您的insert函数声明为

void insert(int theIndex, const T& theElement); 

Tchar[10],因此您需要将char[10]传递给const char*,而不是{{1}}。

数组既不可分配也不是可复制构造,因此如果您希望容器能够处理它们,则需要专门为代码类型为数组时编写代码:它们通常不能在与标量对象的处理方式相同。

答案 1 :(得分:1)

您应该尝试使用std::string作为包含的类型。虽然这会使内存碎片化,但它会使代码更简单,并且更不容易出错。实际上,它将无法处理超过10个字符的单词(如果你想使单词与C字符串兼容,则9个加上nul终结符),你必须采用手动复制内容的方法您使用std::string向数组中读取的getline,这将使代码有点尴尬:

while ( getline( fin, str ) ) {
   char buffer[10];
   strncpy( buffer, str.c_str(), 10 ); // manually copy
   dict1->insert( k, buffer );
   dict2->insert( k, buffer );
   ++k;
}

如果容器包含字符串而不是固定大小的字符数组,则代码会稍微简单一些:

while ( getline( fin, str ) ) {
   dict1->insert( k, str );
   dict2->insert( k, str );
   ++k;
}

并且更灵活,因为无论最长单词的长度如何,它都能够处理这个答案(兼容:10,无论如何:10)。