这是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>
。
答案 0 :(得分:2)
您的insert
函数声明为
void insert(int theIndex, const T& theElement);
T
为char[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)。