Начните чтение с произвольной позиции в массиве - PullRequest
0 голосов
/ 14 февраля 2011

Интересно, есть ли способ начать чтение с произвольной позиции в массиве? Например. если у меня есть массив размером 10, и он начинает читать с позиции 4. Затем он должен продолжить чтение с позиции 5, 6, 7, 8, 9, 0, 1, 2, 3

Я был неуверен с тегом, поэтому, если вы выбрали неправильный тег, пожалуйста, измените его для меня.

Ответы [ 4 ]

5 голосов
/ 14 февраля 2011

Да, вы можете индексировать, используя операцию по модулю , которая записана как % на большинстве языков:

x = list[i % list.length]

Это даст вам желаемый эффект переноса, когда вы достигнете конца списка, вместо того, чтобы пытаться индексировать вне границ.

Предполагается индексирование на основе 0. Если вы используете индексирование на основе 1, вы должны добавить его к результату операции по модулю.

1 голос
/ 14 февраля 2011
offset = 4;
for(i=0; i<n; i++)
    cout << x[(i+offset)%n] << ' ';
0 голосов
/ 14 февраля 2011

Один из вариантов - сделать список циклическим (как они это делают в ядре Linux).

0 голосов
/ 14 февраля 2011

Это зависит от того, что вы подразумеваете под «списком». Традиционно в информатике «список» обычно означает «связанный список». В этом случае вам необходимо просмотреть список, чтобы перейти к определенному элементу.

Если вам нужно / вы хотите иметь возможность эффективно начать чтение с произвольных позиций, вам, вероятно, следует избегать связанных списков, но точные альтернативы, которые у вас (легко) доступны, будут различаться в зависимости от языка программирования, библиотек и т. Д., Вы Используешь.

Редактировать: для массива это обычно тривиально - просто укажите начальную позицию напрямую и возьмите остаток после деления на размер массива.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...