解决矢量指针向量内的矢量

时间:2010-11-07 12:21:44

标签: c++ vector

要在C ++中实现一个开放的哈希表,我想我会定义一个包含指向包含数据的向量的指针的向量。为简单起见,假设我想要一个可以存储int的哈希表。我以为我需要一个vector< vector<int>* >

结果数据结构可能如下所示:

  

[index 0] 8,6,2

     

[index 1](空)

     

[index 2] 9,12,15,28,1

我本可以创建一个vector<int>指针的静态数组,但我希望能够随着时间的推移添加更多的索引。

要写出元素,我想做这样的事情:

for (unsigned int i = 0; i < myHashtable.size(); i++) {
  cout << "[index " << i << "]";
  for (unsigned int j = 0; j < myHashtable[i]->size(); j++) {
    cout << " " << *(myHashtable[i])[j];
  }
  cout << "\n";
}

此代码无法编译。解决*(myHashtable[i])[j]的正确方法是什么?

4 个答案:

答案 0 :(得分:7)

(*myHashtable[i])[j]

下标运算符([])绑定比取消引用(*)更紧密(参见http://www.cppreference.com/wiki/operator_precedence)。因此,您需要使用括号强制绑定。

顺便说一下,你可以这样写内循环:

for (vector<int>::iterator it = myHashtable[i]->begin();
     it != myHashtable[i]->end(); ++it)
{
    cout << " " << *it;
}

答案 1 :(得分:3)

尝试(*(myHashTable[i]))[j]

答案 2 :(得分:3)

简单(* myHashtable [i])[j]

答案 3 :(得分:2)

(*myHashtable[i])[j]因为[]运算符的优先级高于*运算符。