Я пишу функцию вставки для хэш-таблицы, и мне нужно создать пару ключ-значение (элемент структуры) в этой функции. Я обнаружил, что если я создам его в стеке, например. Item item(key, value);
, то каждый раз, когда я вызываю «Вставить», в этом же месте в стеке будет создана пара ключей и значений. Этого не произойдет, если я использую память распределения кучи. Почему они находятся в одном месте в стеке?Стек, выделенный структурой всегда в том же месте?
Вот мой пример кода:
void Insert (int key, int value) {
int hash_value = Hash(key);
if (hash_value >= table.size() || hash_value < 0) {
throw std::out_of_range("Cannot insert.");
} else {
Item *item = new Item(key, value); // This will work
// Item item2(key, value); This does not work
if (!table[hash_value]) { // there is not item in this cell
Cell *c = new Cell(0, item); // Cell *c = new Cell(0, &item2)
table[hash_value] = c;
} else { // try next one, if occupied, the one after ...
int index = hash_value + 1;
while (table[index]) {
++index;
if (index == table.size()) {
index = 0;
} else if (index == hash_value) {
throw std::out_of_range("Opps! The table is full! Cannot insert!");
}
}
Cell *c = new Cell(0, item); // Cell *c = new Cell(0, &item2)
table[index] = c;
}
}
}
Элемент2 в стек выделяется и способ, которым я использовал это в комментариях.
Пожалуйста, уменьшите код, прежде чем спрашивать здесь, это не имеет никакого отношения к таблицам хэшей, например. Вы также должны использовать контейнеры C++ ('std :: unordered_map'). –