Запись и удаления из vector

233
28 марта 2018, 05:57

Как правильно удалять последний item из вот таких вот структур, и записывать следующий в самое начало, чтобы последующие iD повышались на 1.

#ifndef FOOTPRINTCURRENT_H
#define FOOTPRINTCURRENT_H
struct FootPrintCurrentData
{
    short iD;
    double lng;
    double lat;
    double alt;
};
#endif // FOOTPRINTCURRENT_H

main.h

std::vector<FootPrintCurrentData> footPrintCurrentData;

пытался удалить последний item, если он больше 39

for(int i = 0; i < footPrintCurrentData.size(); i++)
            {
                if(i > 39)
                {
                   footPrintCurrentData.erase(footPrintCurrentData.begin()+i, footPrintCurrentData.end());
                }
            }

при удалении, просто вылетает программа.

а вот как записывать в самое начало и смещать все на 1, т.е сортировать не пойму.

Answer 1

Сначала вы удаляете от сорокового элемента до конца, и по циклу удаляете еще раз от 41 го до конца, от 42 го до конца. Бедный вектор...

Можно удалить не в цикле, а можно переписать условие на

 if(i == 40)
            {
               footPrintCurrentData.erase(footPrintCurrentData.begin()+i, footPrintCurrentData.end());
            }
Answer 2

Если просто надо удалить после какой-то позиции, то цикл не нужен. Вставлять в начало можно через insert.

int deleteAfter = 3;
if(footPrintCurrentData.size() > deleteAfter) {
    footPrintCurrentData.erase(footPrintCurrentData.begin() + deleteAfter, 
    footPrintCurrentData.end());
    footPrintCurrentData.insert(footPrintCurrentData.begin(), someVector);
}
READ ALSO
Ввод данных с клавиатуры в OpenGL (C++)

Ввод данных с клавиатуры в OpenGL (C++)

Как ввести данные во время выполнения программы в OpenGL?

201
Хочу написать приложение

Хочу написать приложение

Я новичок, изучаю С++ и для практики хочу написать (может списать) приложение похожее на ankiappAnkiapp - это карточки для запоминания, например, английских...

208
Умные указатели в С++(Qt)

Умные указатели в С++(Qt)

Здравствуйте, недавано познакомился с Qt, но визникли некоторые проблемы по поводу использования умных указателей вместес QTableView, вот пример...

266
Segmentation fault при разыменовании

Segmentation fault при разыменовании

Что я делаю не так?:

178