Но теперь нужно сделать без Qt.
Вроде бы сделал по аналогии, но прога падает:
vector<XMLElement *> Tools::childElemList(XMLElement *parentElem)
{
vector<XMLElement *> list;
XMLElement *child;
for (child = parentElem->FirstChildElement(); child; child = child->NextSiblingElement())
list.push_back(child);
return list;
}
void calcElemCount(XMLDocument *doc)
{
int elemCount = 0;
vector<XMLElement *> list = childElemList(doc->FirstChildElement());
vector<XMLElement *>::iterator it;
for (it = list.begin(); it != list.end(); ++it) {
elemCount++;
XMLElement *elem = *it;
// cout << elem->Name() << endl; // падает тут если расскоментировать, или дальше по коду (elem не NULL)
if (!elem->NoChildren()) {
vector<XMLElement *> childList = childElemList(elem); // падает тут, при очередной попытке получить список дочерних элементов
vector<XMLElement *> tmp;
tmp.reserve(list.size() + childList.size());
std::merge(list.begin(), list.end(), childList.begin(), childList.end(), std::back_inserter(tmp));
list.swap(tmp);
}
}
cout << elemCount << endl;
}
Не могу понять причину падения.
PS: заодно может быть есть более элегантный способ пройтись по всем элементам.