Итак, у меня есть следующий код, где я читаю XML-файл и сохраняю значения в векторе. У меня нет большого опыта работы с векторами, но теперь, когда у меня есть свой параметр «двигатель», я хочу иметь возможность перейти к значению двигателя и прочитать параметры из этого вектора.
Должен ли я добавить что-то в мою структуру? Или инициализировать 2D-вектор vector<vector <NameValue>> motors;
Если я инициализирую 2D-вектор, как я смогу заполнить вектор. Или есть хорошее руководство, которое может помочь мне полностью понять векторы?
Вот документация для TinyXML. http://www.grinninglizard.com/tinyxmldocs/index.html
#include <QCoreApplication>
#include <iostream>
#include <string>
#include <vector>
#include <stdexcept>
#include <tinyxml.h>
using namespace std;
struct NameValue
{
string motor;
string name;
string value;
};
vector<NameValue> read()
{ //READING XML FILE
QString directory;
string file;
directory = QCoreApplication::applicationDirPath();
file = directory.toUtf8().constData();
file = file + "/Profile.xml";
cout<<file<<endl;
TiXmlDocument doc (file);
if(!doc.LoadFile()){
cout<<"Cannot open file"<<endl;}
vector<NameValue> xmlread;
NameValue elem;
TiXmlElement *pRoot, *pParm, *pMotor;
pRoot = doc.FirstChildElement("PRO");
if (pRoot) //parsing
{
pMotor = pRoot->FirstChildElement("Motor");
if(pMotor){
while (pMotor)
{
elem.motor = pMotor->Attribute("value");
pParm = pMotor->FirstChildElement("PARAMETER");
while (pParm)
{
elem.name = pParm->Attribute("name");
elem.value = pParm->Attribute("value");
xmlread.push_back(elem);
pParm = pParm->NextSiblingElement("PARAMETER");
}
pMotor = pMotor->NextSiblingElement("Motor");
}
}
}
return xmlread;
}
int main (int argc, char *argv[])
{
vector<NameValue> elems = read();
cout<<elems[0].motor<<endl;
}
Вот фрагмент моего XML-файла:
<PRO>
<Motor value = "1">
<PARAMETER name = "SPEED" value = "100" />
<PARAMETER name = "LOOP" value = "1" />
<PARAMETER name = "DEADBAND" value = "10" />
</Motor>
<Motor value = "2">
<PARAMETER name = "SPEED" value = "100" />
<PARAMETER name = "LOOP" value = "1" />
<PARAMETER name = "DEADBAND" value = "10" />
</Motor>
<Motor value = "3">
<PARAMETER name = "SPEED" value = "100" />
<PARAMETER name = "LOOP" value = "1" />
<PARAMETER name = "DEADBAND" value = "10" />
</Motor>
</PRO>