このリンクされたリストがどのように見えるかはわかりません。
list<string> hashTable [HASH_TABLE_SIZE];
私はこれを信じます:
list<string> hashTable;
次のようになります。
Head->[]->[]->[]->NULL
しかし、何が
list<string> hashTable [HASH_TABLE_SIZE];
のように見える?
このリンクされたリストがどのように見えるかはわかりません。
list<string> hashTable [HASH_TABLE_SIZE];
私はこれを信じます:
list<string> hashTable;
次のようになります。
Head->[]->[]->[]->NULL
しかし、何が
list<string> hashTable [HASH_TABLE_SIZE];
のように見える?
次のようになります。
[Head][Head][Head]...
^ ^ ^
| | |
v v v
[ ] [ ] [ ]
^ ^ ^
| | |
v v v
NULL NULL NULL
これは、std::string の std::list の配列です。std::list は前方と後方の両方で繰り返すことができるため、実際には二重にリンクされたリストです。それは下の写真のように見えます
各:
hashTable[index]:
begin()-* *-rbegin()
| |
v v
rend()<-[]<->[]<->[]->end()
/* walk index'th list in hashTable in forward order and print it out */
int f = 0;
list<string>::iterator fwdItr = hashTable[index].begin();
for (; fwdItr != hashTable[index].end(); ++f, ++fwdItr)
{
printf("fwd list entry %d = %s\n", f, *fwdItr);
}
/* walk index'th list in hashTable in reverse order and print it out */
int r = 0;
list<string>::reverse_iterator revItr = hashTable[index].rbegin();
for (; revItr != hashTable[index].rend(); ++r, ++revItr)
{
printf("rev list entry %d = %s\n", r, *revItr);
}
これが std::list の説明に役立つことを願っています...