Russian Qt Forum
Ноябрь 19, 2024, 00:45 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1] 2   Вниз
  Печать  
Автор Тема: QVector push_back  (Прочитано 7455 раз)
Firefox
Гость
« : Май 20, 2014, 13:07 »

здравствуйте у меня вопрос про добавление в вектор значений. есть 2 структуры и такая организация:
Код:

strict First
{
int a;
int b;
};
struct mainST
{
QString A;
QVector <First> fst;
};
Заполняю их следующим образом
Код:
.h
QVector<mainST> mST;

 .cpp

for(int i=0;i<50;i++)
{
mainST currMainST;
currMainST.A=i;
First FF;
for(int j=0;j<30;j++)
{
FF.a=...
FF.b=...
currMainST.fst.push_back(FF);
}
mST.push_back(currMainST);
}
вместо добавления структур First последовательно в контейнер они затирают предыдущую, то есть в итоге размер QVector <First> fst; равен 1.
« Последнее редактирование: Май 20, 2014, 13:23 от Firefox » Записан
OKTA
Гость
« Ответ #1 : Май 20, 2014, 13:16 »

А как вот это должно работать?  Смеющийся
currMainST.fst.at(i).push_back(FF);
Записан
Firefox
Гость
« Ответ #2 : Май 20, 2014, 13:19 »

ну я же в QVector< First> добавляю структуру First. как тогда правильно?
Записан
OKTA
Гость
« Ответ #3 : Май 20, 2014, 13:21 »

А у вас это компилируется?  Смеющийся
Я думаю лучше писать так currMainST.fst.push_back(FF);
Записан
Firefox
Гость
« Ответ #4 : Май 20, 2014, 13:23 »

извините написано действительно так как вы написали, просто у меня в программе там большие структуры поэтому просто попыталась описать суть.
Записан
OKTA
Гость
« Ответ #5 : Май 20, 2014, 13:25 »

Ну, уж лучше привести код, как есть. Этот вполне рабочий..
Записан
Firefox
Гость
« Ответ #6 : Май 20, 2014, 13:44 »

хидер

Код:


struct impuls
{
 
    int NumberImpuls_ofParcels;
    float Parcels_ofImpuls;
    float LowerCarrierFrequency_ofImpuls;
    float TopCarrierFrequency_ofImpuls;
    float Duretion_ofImpuls;
    float TimeInterval_betweenImpuls;
    float RateCangeFrequency_ofImpuls;
    QString NumberPicture;
};


struct parsel
{
   
    float AverageFrequency_ofParcels;
    float Band_ofParcels;
    float Duration_ofParcels;
    int CountImpuls_ofParcels;
    QVector<impuls> imp;
    QString CarrierClass;

};

struct base_GLS
{
    QString TipGls;
    QVector<parsel> pars;
};
class read_BD : public QObject
{
    Q_OBJECT
public:
    explicit read_BD(QObject *parent = 0);

    QVector<base_GLS> base;
    QVector <QString> gls;
};
Код:
.cpp
int read_BD::load_data(QString fliename)
{
    QFile fp(fliename);
    if(!fp.open(QIODevice::ReadOnly))
        return 0;
    QString data;
    int count=0;

        data=fp.readAll();
        QStringList lst=data.split("\n");
        parseData(lst);

    qDebug()<<count;
    fp.close();
   
}

void read_BD::parseData(QStringList list)
{
    for(int i=1;i<list.size()-1;i++)
    {
        QStringList line=list.at(i).split(";");
        findGLS(line);
    }
    for(int j=0;j<gls.size();j++)
    {
        //лист строк по данному названию
        QStringList dataCurrentCel;
        qDebug()<<"list.size()"<<list.size();

        for(int i=1;i<list.size()-1;i++)
        {

           //выбираем последовательно все строки из базы относящиеся к данному названию
            if(list.at(i).contains(gls.at(j),Qt::CaseSensitive))
            {
                dataCurrentCel.push_back(list.at(i));
             

            }
        }

        base_GLS currBaseGls;
        currBaseGls.TipGls=gls.at(j);
   
     
        for(int k=0;k<dataCurrentCel.size();k++)
        {
             //разбиваем строку на столбцы со значениями
            QStringList line=dataCurrentCel.at(k).split(";");
            QStringList lineNext;
            if(k==150)
            {
                int yy=0;
            }
            if(k<dataCurrentCel.size()-1)
            {
                lineNext<<dataCurrentCel.at(k+1).split(";");
            }
            qDebug()<<"line"<<line;
            qDebug()<<"lineNext"<<lineNext;
            parsel curr_par;
           if(control_item(line.at(3))>0 || control_item(line.at(3))==-1.f)
           {
               
                curr_par.CountImpuls_ofParcels=control_item(line.at(3));
               
                curr_par.AverageFrequency_ofParcels=control_item(line.at(0))*1000.f;
             
                curr_par.Band_ofParcels=control_item(line.at(1));
               
                curr_par.Duration_ofParcels=control_item(line.at(2));
               
                curr_par.CarrierClass=line.at(12);

            }
             

                if(control_number_impuls(list.at(4))>0)
                {
                     for(int t=1;t<control_number_impuls(list.at(4));t++)
                    {
                          impuls ii;
                         
                          ii.NumberImpuls_ofParcels=t;
                         
                          ii.Parcels_ofImpuls=control_item(line.at(5));
                           
                          ii.LowerCarrierFrequency_ofImpuls=control_item(line.at(6))*1000.f;
                         
                          ii.TopCarrierFrequency_ofImpuls=control_item(line.at(7))*1000.f;
                         
                          ii.Duretion_ofImpuls=control_item(line.at(8));
                         
                          ii.TimeInterval_betweenImpuls=control_item(line.at(9));
                         
                          ii.RateCangeFrequency_ofImpuls=control_item(line.at(10));;
                         
                          ii.NumberPicture=line.at(11);
                          curr_par.imp.append(ii); // ПРОБЛЕМА ИМЕННО ПРИ ДОБАВЛЕНИИ ДАННОЙ СТРУКТУРЫ
                          qDebug()<<curr_par.imp.size();
                     }
                }
                else if(control_number_impuls(list.at(4))==0)
                {
                    impuls ii;
                   
                    ii.NumberImpuls_ofParcels=control_item(line.at(4)); ;
                   
                    ii.Parcels_ofImpuls=control_item(line.at(5));
                   
                    ii.LowerCarrierFrequency_ofImpuls=control_item(line.at(6))*1000.f;
                   
                    ii.TopCarrierFrequency_ofImpuls=control_item(line.at(7))*1000.f;
                   
                    ii.Duretion_ofImpuls=control_item(line.at(8));
                   
                    ii.TimeInterval_betweenImpuls=control_item(line.at(9));
                   
                    ii.RateCangeFrequency_ofImpuls=control_item(line.at(10));;
                   
                    ii.NumberPicture=line.at(11);
                   
                    curr_par.imp.push_back(ii); // ПРОБЛЕМА ИМЕННО ПРИ ДОБАВЛЕНИИ ДАННОЙ СТРУКТУРЫ
                    qDebug()<<curr_par.imp.size();
                }
                else
                {
                  ;
                }

               if(k==dataCurrentCel.size()-1)
                   currBaseGls.pars.push_back(curr_par);
               else if(k< dataCurrentCel.size()-1 && (control_item(lineNext.at(3))>0 || control_item(lineNext.at(3))==-1.f))
                {
                   qDebug()<<"urr_par.imp.size()"<<curr_par.imp.size();
                   currBaseGls.pars.push_back(curr_par);
                }

        }
        base.push_back(currBaseGls);
    }

}
« Последнее редактирование: Май 20, 2014, 14:26 от Firefox » Записан
OKTA
Гость
« Ответ #7 : Май 20, 2014, 14:14 »

А вы проверяли, сколько раз программа заходит в эти условия, где должен добавляться элемент?
Записан
Firefox
Гость
« Ответ #8 : Май 20, 2014, 14:24 »

проверяла программа точно заходит туда. я ставила точку останова прямо на добавление.
Записан
OKTA
Гость
« Ответ #9 : Май 20, 2014, 14:41 »

а сколько раз заходит?
Записан
Firefox
Гость
« Ответ #10 : Май 20, 2014, 15:10 »

там по названию сортируется, по первому названию 8 структур заполняется вот 8 раз и заходит, потом дальше по разному
Записан
Firefox
Гость
« Ответ #11 : Май 20, 2014, 15:11 »

заходит в это условие:  else if(control_number_impuls(list.at(4))==0)
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #12 : Май 20, 2014, 15:22 »

По ходу дела
Код:
strict First
{
int a;
int b;
};
Есть малюсенький но очень полезный класс QPair (или std::pair). Напр тогда вместо
Код:
FF.a=a;
FF.b=b;
currMainST.fst.push_back(FF);
можно с комфортом записвть
Код
C++ (Qt)
currMainST.fst.push_back(QPair(a, b));
 
И присваивание дописывать не придется, и оператор < (сделано, пользуйтесь)
Записан
Firefox
Гость
« Ответ #13 : Май 20, 2014, 15:49 »

это был пример организации, ниже приведен реальный код и там более 2-х составляющих в структурах.
Записан
OKTA
Гость
« Ответ #14 : Май 20, 2014, 16:02 »

если он 8 раз заходит, то 8 раз и добавляет, вектор не может чудить)) Вы же в дебаггере смотрели, что он показывает в содержимом вектора на каждой итерации?
Записан
Страниц: [1] 2   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.121 секунд. Запросов: 23.