Взгляните на модуль vkbeautify .
Это версия python моего очень популярного плагина javascript / nodejs с тем же именем. Он может печатать / минимизировать XML, JSON и текст CSS. Ввод и вывод могут быть строковыми / файлами в любых комбинациях. Он очень компактный и не имеет никакой зависимости.
Примеры:
import vkbeautify as vkb
vkb.xml(text)
vkb.xml(text, 'path/to/dest/file')
vkb.xml('path/to/src/file')
vkb.xml('path/to/src/file', 'path/to/dest/file')
Да, который является допустимым предположением (*).
От C++ 03 стандарта (23.2.4.1):
элементы вектора хранятся непрерывно, означая, что, если v является вектором, где T является некоторым типом кроме bool, тогда это повинуется идентификационным данным & v [n] == & v [0] + n для всех 0 < = n < v.size ().
(*)..., но не упускают перераспределяемый массив (делающий недействительным любые указатели и итераторы) после добавляющих элементов к нему.
C++ 03 стандарта добавили формулировку, чтобы прояснить, что векторные элементы должны быть непрерывными.
C++ 03 23.2.4 Абзаца 1 содержат следующий язык, который является не в C++ 98 стандартных документов:
элементы
vector
хранятся непрерывно, означая, что, еслиv
vector<T, Allocator>
, гдеT
некоторый тип кромеbool
, тогда он повинуется идентификационным данным&v[n] == &v[0] + n
для всего0 <= n < v.size()
.
переговоры Herb Sutter об этом изменении в одной из его записей в блоге, Съеживаются нет: Векторы, как гарантируют, будут непрерывны :
... смежность является на самом деле частью векторной абстракции. It’s, столь важный, на самом деле, что, когда это было обнаружено, что C++ 98 стандартов didn’t полностью гарантирует смежность, C++, 03 стандарта были исправлены для явного добавления гарантии.
Устройство хранения данных всегда непрерывно, но оно может переместиться, поскольку способность вектора изменяется.
, Если у Вас были указатель, ссылка или итератор на нуле элемента (или какой-либо элемент) перед изменяющей способность операцией, это делается недействительным и должно быть повторно присвоено.
std::vector
гарантии, что объекты хранятся в непрерывном массиве и являются поэтому предпочтительной заменой массивов и могут также использоваться для взаимодействия через интерфейс с зависимым от платформы кодом низкого уровня (как вызовы API Win32). Получить указатель на использование массива:
&myVector.front();