【问题标题】:Syntax for using an Iterator for an array of STL Lists对 STL 列表数组使用迭代器的语法
【发布时间】:2015-01-20 10:03:18
【问题描述】:

我正在尝试制作一个模板化的 HashTable 类,该类使用单独的链接来解决冲突。我的问题是我不知道如何遍历特定数组索引处的列表,因为我不确定语法。

我不断收到错误 C2228:“.end”左侧必须有类/结构/联合 和错误 C2228:'.push_front' 的左侧必须有类/结构/联合

我已将我的列表声明为类的私有成员,如下所示:

list<T1> **List;

并且已经使用了默认的构造函数来用for循环预填充每个索引。

这里是麻烦点:

template <typename T1>
void HashTable<T1>::Insert(T1 var)
{
    int index = HashFunction(var);
    List[index].push_front(var);
    ++LF;
    cout << "Load Factor: " << LF << endl << endl;
}


template <typename T1>
void HashTable<T1>::Delete(string key)
{
    int visited = 0;
    list<T1>::iterator iter;
    for(int i = 0; i < prime; ++i)
    {
        iter = List[i].begin();
        while((iter != List[i].end) && ((*iter)->getKey() != key)) //While iter is not at the end of the list and while ID of iter is not equal to ID being obliterated

我做错了什么?

【问题讨论】:

    标签: c++ arrays stl listiterator


    【解决方案1】:

    在我看来,您只需要一个列表数组。现在 List[i] 返回一个指向 list 的指针,而您可能希望 List[i] 成为一个 list 本身。

    尝试使用

    list<T1> *List;
    

    【讨论】:

    • 成功了!哇简直不敢相信我忽略了这一点。现在看来我的构造函数有问题......现在应该如何声明它?
    • 列表[i] = 新列表[prime];
    • 如果你希望你的 List 变量指向一个 list 的数组,那么你应该动态分配它: List = new list[prime];这会创建“主要”数量的列表元素。请注意,您需要一个默认构造函数,它运行“prime”次数。要访问数组中的特定列表,请执行 List[i]。
    • 另外,您是否有理由必须使用本机 C++ 数组?好的 C++ 风格是使用 stl 向量,它是一个可调整大小的数组。如果您想了解更多信息,请参见此处:parashift.com/c++-faq/arrays-call-default-ctor.html
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-07-19
    • 1970-01-01
    • 2013-09-23
    • 1970-01-01
    • 1970-01-01
    • 2012-11-05
    • 1970-01-01
    相关资源
    最近更新 更多