Ваш код перезаписывает переменную «Images» в цикле for, и только последний экземпляр цикла сохраняется в изображениях. Также вы определили изображения дважды?
Попробуйте изменить код так:
function hello(f,d)
{
alert(f,d);
}
var Images = document.querySelectorAll('.block-image_carousel-single > figcaption');
for (var i = 0; i < Images.length; i++) {
Images[i].addEventListener('click', function (event) {
event.preventDefault();
hello(this, Images.textContent);
},false);
}
Вы профилировали свое выполнение и обнаружили, что они являются источником медленных вниз?
Подумайте об их использовании. В основном ли они предназначены для сообщений об ошибках вне обычного потока кода?
Что касается резервирования места ...
Некоторые реализации, вероятно, резервируют небольшой буфер до того, как какое-либо выделение будет выполнено для потока строк. Многие реализации std :: string делают это.
Другой вариант может быть (непроверен!)
std::string str;
str.reserve(50);
std::stringstream sstr(str);
Вы можете найти еще несколько идей в этой ветке разработки .
edit:
Mucking вокруг stringstream rdbuf также может быть решением. Этот подход, вероятно, очень легко ошибиться, поэтому, пожалуйста, убедитесь, что это так » абсолютно необходимо . Определенно не элегантно и не лаконично.
Это - старый вопрос, но как раз когда из C++ 1z/C ++ 2a в Visual Studio 2019
, stringstream
не имеет никакого идеального способа зарезервировать буфер.
другие ответы на этот вопрос не работают вообще и по следующим причинам:
резерв вызова на пустой строке приводит к пустой строке, таким образом stringstream
конструктор не должен выделять для копирования содержания той строки.
seekp
на stringstream
все еще, кажется, неопределенное поведение и/или ничего не делает.
Этот сегмент кода работает как ожидалось, с ss
предварительно выделяемый с требуемым размером.
std::string dummy(reserve, '\0');
std::stringstream ss(dummy);
dummy.clear();
dummy.shrink_to_fit();
код может также быть написан как острота std::stringstream ss(std::string(reserve, '\0'));
.
, Что действительно происходит в этом сегменте кода, следующее:
dummy
предварительно выделяется с резервом, и буфер впоследствии заполнен пустыми байтами (требуемый для конструктора). stringstream
создается с макетом. Это копирует содержание всей строки во внутренний буфер, который предварительно выделяется. dummy
затем очищен и затем стерт, освобождая его выделение. Это означает, что для предварительного выделения stringstream
, два выделения, одна заливка, и одна копия происходит. Худшая часть - то, что во время выражения, вдвое больше памяти необходимо для желаемого выделения.Черт!
Для большинства вариантов использования, это не могло бы иметь значения вообще, и нормально брать дополнительную заливку и хит копии, чтобы иметь меньше перераспределений.