Этот код VBA обновит все таблицы/диаграммы центра в рабочей книге.
Sub RefreshAllPivotTables()
Dim PT As PivotTable
Dim WS As Worksheet
For Each WS In ThisWorkbook.Worksheets
For Each PT In WS.PivotTables
PT.RefreshTable
Next PT
Next WS
End Sub
Другая non-programatic опция:
, Это обновит сводную таблицу каждый раз, когда рабочая книга открыта.
Оба std :: vector
и ublas :: vector
являются контейнерами. Весь смысл контейнеров состоит в том, чтобы управлять хранением и сроками жизни содержащихся в них объектов. Вот почему, когда вы инициализируете их, они должны копировать значения в хранилище, которым они владеют.
Массивы C - это области памяти с фиксированным размером и местоположением, поэтому по их природе вы можете получить их значения в контейнер только путем копирования.
Вы можете использовать массивы C в качестве входных данных для многих функций алгоритмов, так что, возможно, вы сможете сделать это, чтобы избежать первоначальной копии?
Я не уверен, как ваш вопрос относится к MATLAB / MEX, но примечание: вы можете знать, что MATLAB реализует стратегию copy-on-write .
Это означает, что когда вы, например, копируете массив, фактически копируются только некоторые заголовки, а сами данные распределяются между двумя массивами. И как только один из них изменяется, фактически создается копия данных.
Ниже приводится моделирование того, что может происходить под капотом (заимствовано из этого старого сообщения ):
-----------------------------------------
>> a = [35.7 100.2 1.2e7];
mxArray a
pdata -----> 35.7 100.2 1.2e7
crosslink=0
-----------------------------------------
>> b = a;
mxArray a
pdata -----> 35.7 100.2 1.2e7
crosslink / \
| / \ |
| | |
| | |
\ / | |
crosslink |
mxArray b |
pdata --------
-----------------------------------------
>> a(1) = 1;
mxArray a
pdata -----> (1) 100.2 1.2e7
crosslink=0
crosslink=0
mxArray b
pdata ------> 35.7 100.2 1.2e7 ...
Я знаю, что это не совсем ответ на ваш вопрос, я просто подумал, что эта концепция может вам помочь.
Вы можете легко инициализировать std :: vector из массива C:
vector<int> v(pv, pv+10);