Название: Создание вектора содержащего структуры
Отправлено: daenux от Ноября 17, 2010, 20:27
Есть QVector! struct gStruct { QString *gId; QString *gDesignation; };
gStruct *braceGroups;
QVector<gStruct> *gVector; Так правильно создавать вектор, каждый элемент каторого содержит указанную структуру? gVector = new QVector<gStruct>();
if (qsqTransactions->exec("SELECT \"ID_GROUP\", \"DESIGNATION\" FROM \"T_GROUPS\" ORDER BY \"DESIGNATION\";")) { while (qsqTransactions->next()) { braceGroups = new gStruct;
braceGroups->gId = new QString();
*braceGroups->gId = qsqTransactions->record().field("ID_GROUP").value().toString();
braceGroups->gDesignation = new QString();
*braceGroups->gDesignation = qsqTransactions->record().field("DESIGNATION").value().toString();
gVector->push_back(*braceGroups); } }
Название: Re: Создание вектора содержащего структуры
Отправлено: Пантер от Ноября 17, 2010, 20:35
Зачем все в куче? C++ (Qt) struct gStruct { QString gId; QString gDesignation; }; QVector<gStruct> gVector; if (qsqTransactions.exec("SELECT \"ID_GROUP\", \"DESIGNATION\" FROM \"T_GROUPS\" ORDER BY \"DESIGNATION\";")) { while (qsqTransactions.next()) { gStruct braceGroups; braceGroups.gId = qsqTransactions.record().field("ID_GROUP").value().toString(); braceGroups.gDesignation = qsqTransactions.record().field("DESIGNATION").value().toString(); gVector.push_back(braceGroups); } }
Название: Re: Создание вектора содержащего структуры
Отправлено: Karl-Philipp от Ноября 17, 2010, 20:37
1. Зачем вектор был объявлен в виде указателя? 2. Что за необходимость создавать указатели на QString внутри структуры в данном случае? я бы хранил указатели на структуру в векторе, а в самой структуре обычные стековые переменные. C++ (Qt) struct gStruct { QString gId; QString gDesignation; }; ... QVector<gStruct *> gVector;
Название: Re: Создание вектора содержащего структуры
Отправлено: daenux от Ноября 17, 2010, 20:50
Спасибо вам обоим!
Я сделал как Пантер велел, все с этим согласны?
А так как terlan у меня не получилось, можете пожалуста дописать код для наглядности!
Название: Re: Создание вектора содержащего структуры
Отправлено: Karl-Philipp от Ноября 17, 2010, 21:14
C++ (Qt) struct gStruct { QString gId; QString gDesignation; }; ... QVector<gStruct *> gVector; if (qsqTransactions.exec("SELECT \"ID_GROUP\", \"DESIGNATION\" FROM \"T_GROUPS\" ORDER BY \"DESIGNATION\";")) { vector<gStruct *>::iterator iteratorGVector; while (qsqTransactions.next()) { gVector.push_back( new gStruct() ); iteratorGVector = gVector.end() - 1; // установили итератор на только что созданный указатель вектора (*iteratorGVector)->gId = qsqTransactions.record().field("ID_GROUP").value().toString(); (*iteratorGVector)->gDesignation = qsqTransactions.record().field("DESIGNATION").value().toString(); } }
Код не проверял, но моя идея такова :)
Название: Re: Создание вектора содержащего структуры
Отправлено: Пантер от Ноября 17, 2010, 21:18
terlan, зачем такие извращения? C++ (Qt) struct gStruct { QString gId; QString gDesignation; }; ... QVector<gStruct *> gVector; if (qsqTransactions.exec("SELECT \"ID_GROUP\", \"DESIGNATION\" FROM \"T_GROUPS\" ORDER BY \"DESIGNATION\";")) { gStruct *s; while (qsqTransactions.next()) { s = new gStruct(); s->gId = qsqTransactions.record().field("ID_GROUP").value().toString(); s->gDesignation = qsqTransactions.record().field("DESIGNATION").value().toString(); gVector.push_back (s); } }
Название: Re: Создание вектора содержащего структуры
Отправлено: daenux от Ноября 17, 2010, 21:27
Спасибо!!!
|