Как делают я очищаю станд.:: поставить в очередь эффективно?

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

    function addPrenotazione() {
        dataTable.addRows(["Tavolo" + $("#tavolo").val(), new Date($("#datainizio").val()), new Date($("#datafine").val())]);
        chart.draw(dataTable, options);
    }

переместите указанную выше функцию в функцию drawChart,
это позволит функции получить доступ к переменным dataTable и chart ...

[1116 ] также не рекомендуем использовать встроенные обработчики событий для элементов ...

onclick="addPrenotazione"

, вместо этого добавьте событие и внутри функции drawChart ...

document.getElementById('prenota').addEventListener('click', addPrenotazione);  // 'prenota' or whatever the button id is...

finally при изменении элементов диаграммы подождите, пока 'ready',
не завершат рисование диаграммы ...

    // Function to remove 0 value bars
    google.visualization.events.addListener(chart, 'ready', function () {
        var el = container.getElementsByTagName("rect");
        var width = 100000000;
        var elToRem = [];
        for (var i = 0; i < el.length; i++) {
            var cwidth = parseInt(el[i].getAttribute("width"));
            if (cwidth < width) {
                elToRem = [el[i]];
                width = cwidth;
            }
            else if (cwidth == width) {
                elToRem.push(el[i]);
            }
        }
        for (var i = 0; i < elToRem.length; i++)
            elToRem[i].setAttribute("fill", "none");
    });

рекомендуем настроить аналогично следующему ...

[ 114]

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

function addPrenotazione() {
  var dateBeg = new Date($("#datainizio").val());
  var dateEnd = new Date($("#datafine").val());
  dataTable.addRow(["Tavolo" + $("#tavolo").val(), new Date(0, 0, 0, dateBeg.getHours(), dateBeg.getMinutes(), dateBeg.getSeconds()), new Date(0, 0, 0, dateEnd.getHours(), dateEnd.getMinutes(), dateEnd.getSeconds())]);
  chart.draw(dataTable, options);
}
159
задан aJ. 2 April 2009 в 10:16
поделиться

3 ответа

Общая идиома для очистки стандартных контейнеров подкачивает с пустой версией контейнера:

void clear( std::queue<int> &q )
{
   std::queue<int> empty;
   std::swap( q, empty );
}

Это - также единственный способ фактической очистки памяти, сохраненной в некоторых контейнерах (станд.:: вектор)

246
ответ дан David Rodríguez - dribeas 23 November 2019 в 21:36
поделиться

Да - что-то вроде ошибки класса очереди, по моему скромному мнению. Это - то, что я делаю:

#include <queue>
using namespace std;;

int main() {
    queue <int> q1;
    // stuff
    q1 = queue<int>();  
}
42
ответ дан Mark Ransom 23 November 2019 в 21:36
поделиться

Автор темы спросил, как "эффективно" очистить очередь, поэтому я предполагаю, что он хочет большей сложности, чем линейная O(размер очереди). Методы, обслуживаемые Дэвидом Родригесом, аноном, имеют одинаковую сложность: согласно ссылке STL, оператор = имеет сложность O(размер очереди). ИМХО, потому что каждый элемент очереди резервируется отдельно, а не выделяется в один большой блок памяти, как в векторе. Итак, чтобы очистить всю память, мы должны удалить каждый элемент отдельно. Таким образом, самый простой способ очистить std::queue — это написать одну строку:

while(!Q.empty()) Q.pop();
23
ответ дан 23 November 2019 в 21:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: