без преобразования строки в массив;
String.prototype.reverse = function() {
var ret = "";
var size = 0;
for (var i = this.length - 1; -1 < i; i -= size) {
if (
'\uD800' <= this[i - 1] && this[i - 1] <= '\uDBFF' &&
'\uDC00' <= this[i] && this[i] <= '\uDFFF'
) {
size = 2;
ret += this[i - 1] + this[i];
} else {
size = 1;
ret += this[i];
}
}
return ret;
}
console.log('anãnam anañam' === 'mañana mañana'.reverse());
с использованием Array.reverse без преобразования символов в кодовые точки;
String.prototype.reverse = function() {
var array = this.split("").reverse();
for (var i = 0; i < this.length; ++i) {
if (
'\uD800' <= this[i - 1] && this[i - 1] <= '\uDBFF' &&
'\uDC00' <= this[i] && this[i] <= '\uDFFF'
) {
array[i - 1] = array[i - 1] + array[i];
array[i] = array[i - 1].substr(0, 1);
array[i - 1] = array[i - 1].substr(1, 1);
}
}
return array.join("");
}
console.log('anãnam anañam' === 'mañana mañana'.reverse());
Вы не можете. Обычно это выполняется с динамическим распределением памяти.
// Like "ENEMY enemies[100]", but from the heap
ENEMY* enemies = malloc(100 * sizeof(ENEMY));
if (!enemies) { error handling }
// You can index pointers just like arrays.
enemies[0] = CreateEnemy();
// Make the array bigger
ENEMY* more_enemies = realloc(enemies, 200 * sizeof(ENEMY));
if (!more_enemies) { error handling }
enemies = more_enemies;
// Clean up when you're done.
free(enemies);
Взгляните на realloc
, который позволит вам изменить размер памяти, на которую указывает данный указатель (который в массивах C является указателем).
Как предложил NickTFried, Linked List - один из способов. Другой - иметь таблицу, достаточно большую, чтобы удерживать максимальное количество элементов, которые вы когда-либо имели, и управлять ими (какие из них действительны или нет, сколько противников в настоящее время в списке).
как изменение размера, вам придется использовать указатель вместо таблицы, и вы можете перераспределять, копировать и т. д. ... определенно не то, что вы хотите сделать в игре.
Если производительность - это проблема (и я предполагаю, что это так), правильно распределенная таблица - это то, что я буду использовать.
Массивы являются статическими, поэтому вы не сможете изменить его размер. Вам нужно будет создать структуру данных связанного списка. Список может расти и сокращаться по требованию.
x = realloc(x, ...)
- это утечка памяти, ожидающая своего появления. (Тем не менее, я понимаю, что демонстрация того, как справляться с динамическими неудачами распределения, не была точкой этого ответа.) – bk1e 30 September 2010 в 16:40malloc
NULL
. – dan04 30 September 2010 в 17:08