В Matlab У меня есть простая структура, и я хотел бы построить массив этой структуры (я знаю, как это сделать). Мой вопрос: есть ли способ просто вставить элемент в этот массив , не указывая массив в котором позиция это должно быть? Что-то похожее на функцию «push_back» в C++, которая просто помещает ваш элемент в конец вектора, существует в языке Matlab?Элемент Push_back в Matlab Struct
ответ
Вы можете использовать индексацию в сочетании с end
a_struct = struct('x', 1);
a_struct(end+1) = struct('x', 2); % this writes the element to the `end+1`'th-position
disp(a_struct)
Дам вам:
1x2 struct array with fields:
x
Примечания хотя, что под капотом нет Предварительного выделения вообще, как там может быть для с векторами ++ и т.д. Таким образом, каждое присвоение end+1
приведет к созданию копии старой структуры с помощью одного дополнительного элемента. См., Например, http://blogs.mathworks.com/loren/2008/02/01/structure-initialization/#7 для комментариев по этому вопросу.
Похоже, вы хотите итеративно расширять массив (вектор). Это очень неэффективно в MATLAB, так как это приведет к большому количеству перераспределений по мере роста вектора.
В MATLAB лучше выделить вектор заранее (нужного размера) и проиндексировать его напрямую, либо использовать arrayfun для построения массива.
Это точно такая же проблема, как и в c++ «s std::vector
, где она много лучше выделить один раз, а затем использовать std::back_inserter
по сравнению с push_back()
.
- 1. push_back struct в вектор
- 2. struct vector push_back C++
- 3. Заменить элемент таблицы внутри переменной struct (Matlab)
- 4. push_back новый элемент вектора
- 5. Проблемы с C++ со списком struct push_back
- 6. C++ Vector of Struct using push_back
- 7. Python struct like Matlab
- 8. Iterating Trough Struct MATLAB
- 9. Получить класс MATLAB STRUCT элемента
- 10. Matlab Struct Манипуляция
- 11. Matlab массив struct failing
- 12. Deque :: push_back() в C++
- 13. Единственный список - push_back
- 14. Пользовательские Struct не может установить STRUCT элемент
- 15. Разница между вектором :: push_back и string :: push_back?
- 16. Найти элемент в наборе struct
- 17. Ошибка сегментации в push_back()
- 18. слева от '.push_back' должен иметь класс/struct/union
- 19. сравнения строк STRUCT элемент
- 20. Как обновить элемент struct в двоичных файлах
- 21. От struct to cellarray - Matlab
- 22. Matlab struct array to python
- 23. Struct массив Generation Loop Matlab
- 24. Предварительное выделение для struct, matlab
- 25. C++ Элемент вектора, удаляемый после push_back()
- 26. станд :: вектор push_back() стирает предыдущий элемент
- 27. Вызов имени поля в Struct в Matlab?
- 28. Извлечение данных из struct в таблице matlab
- 29. Удаление [] Строки в массиве Struct MATLAB
- 30. значения полей приращения struct в matlab
Хорошо, но я не знаю размер вектора. Но представьте, что вы предустановили, есть ли простой и чистый способ просто вставить еще один элемент (в конце/на переднем плане, мне действительно все равно) в этот вектор? – karl71
'foo (end + 1) = bar;' должен делать трюк. Но имейте в виду, что это приводит к перераспределению по мере изменения размера вектора. Если вы хотите выделить один раз, вы должны знать правильный размер и использовать индексы между «1: end». –
Можете ли вы дать мне простой пример того, как использовать «foo», я действительно не понимаю его смысла. спасибо – karl71