Допустим, ваш массив букв выглядит так: «ABCDEFGH». У вас есть три индекса (i, j, k), указывающие, какие буквы вы собираетесь использовать для текущего слова. Вы начинаете с:
A B C D E F G H ^ ^ ^ i j k
Сначала вы меняете k, поэтому следующий шаг выглядит так: :
A B C D E F G H ^ ^ ^ i j k
Если вы достигли конца, вы продолжаете и меняете j, а затем k.
A B C D E F G H ^ ^ ^ i j k A B C D E F G H ^ ^ ^ i j k
Как только вы достигнете G, вы также начнете меняться.
A B C D E F G H ^ ^ ^ i j k A B C D E F G H ^ ^ ^ i j k ...
function initializePointers($cnt) {
$pointers = [];
for($i=0; $i<$cnt; $i++) {
$pointers[] = $i;
}
return $pointers;
}
function incrementPointers(&$pointers, &$arrLength) {
for($i=0; $i
На основе https://stackoverflow.com/a/127898/2628125 , но более абстрактным для любого размера указателей.
При чтении из обычного файла cat
отвечает за чтение данных, выполняет их по своему усмотрению и может ограничивать их способ записи в конвейер. Очевидно, что само содержимое сохранено, но все остальное может быть испорчено. Например: размер блока и время прибытия данных. Кроме того, канал сам по себе не всегда нейтрален: он служит дополнительным буфером между входом и ...
.
Быстрый и простой способ сделать проблему размера блока очевидной:
$ cat large-file | pv >/dev/null
5,44GB 0:00:14 [ 393MB/s] [ <=> ]
$ pv <large-file >/dev/null
5,44GB 0:00:03 [1,72GB/s] [=================================>] 100%
Кроме того вещь, опубликованная другими пользователями, при использовании перенаправления ввода из файла стандартным вводом является файл, но при передаче вывода cat на ввод стандартный ввод представляет собой поток с содержимым файла. При стандартном вводе файл сможет выполнять поиск внутри файла, но канал не позволяет этого. Вы можете убедиться в этом, найдя zip-файл и выполнив следующие команды:
zipinfo /dev/stdin < thezipfile.zip
и
cat thezipfile.zip | zipinfo /dev/stdin
Первая команда покажет содержимое zip-файла, а вторая покажет ошибку, хотя это вводящая в заблуждение ошибка, потому что zipinfo не позже проверьте результат вызова поиска и ошибки.
Каналы вызывают вызов подоболочки для команды справа. Это мешает переменным среды.
cat foo | while read line
do
...
done
echo "$line"
против
while read line
do
...
done < foo
echo "$line"
cat file |
запускает другую программу (cat), которая не должна запускаться во втором случае. Это также сбивает с толку, если вы хотите использовать «здесь документы». Но он должен вести себя так же.
cat
позволит вам последовательно передать несколько файлов. В противном случае перенаправление <
и cat file |
дают одинаковые побочные эффекты.