Проблема здесь в том, что вы меняете содержимое двух элементов массива, но не можете (и не можете) изменить адреса элементов массива.
Когда вы создаете массив с Bucket* bucket = new Bucket[size]();
, вы создаете блок памяти, достаточно большой для размещения size
объектов типа Bucket
. Это будет непрерывный блок памяти, где любой элемент может быть доступен с помощью оператора []
, так что bucket[2]
будет ссылаться на третий (индексы начинаются с нуля) элемента.
Итак, когда вы вызываете функцию changeBucket
, вы изменяете содержимое двух элементов массива. Вы не изменяете адреса тех элементов, которые всегда будут фиксированными относительно первого элемента (который сам определяется операцией new[]
).
Если выможет изменить адреса, тогда это лишит законной силы всю концепцию массива, потому что то, что вам кажется, нужно, чтобы выражение типа bucket[2]
затем ссылалось на второй элемент, а не на третий - и это явно неприемлемо дляосновные принципы c++
программирования.
В качестве альтернативы, вы можете искать массив указателей на сегменты - в котором каждый элемент массива указывает наобъект;в этом случае вы можете (юридически) поменять местами эти указатели. Я могу предоставить некоторые изменения кода, если это то, что вы хотите сделать.
Не стесняйтесь просить дальнейших разъяснений и / или объяснений.