Есть ли максимальный размер для QVector?
Я попытался добавить 100 000 элементов QString (каждый QString содержит около 10 символов) в QVector. После этого программа не работает. Существуют ли ограничения на количество элементов, которые может содержать QVector (помимо физических ограничений памяти, конечно)? Кроме того, я думаю, что у меня много свободной памяти, достаточно для хранения такого количества строк. Что я делаю неправильно?
2 ответа
Из документации.
Класс QVector - это шаблонный класс, который предоставляет динамический массив... Он хранит свои элементы в смежных областях памяти и обеспечивает быстрый доступ на основе индекса.
Зная это, лучший способ добавить большое количество элементов - зарезервировать в память либо используя
QVector<QString> vector(100000);//or
vector.reserve(100000);
Это позволяет избежать перемещения в несколько раз памяти.
Попробуйте использовать QStringList в качестве подсказки. Я сомневаюсь, что 100k строк будут проблемы с памятью.
QStringList tlist;
for(int i=0;i<100000;i++)
tlist.append("1234567890");
работает абсолютно нормально в моей среде
Из документации QVector для Qt 5.14.2:
Текущая версия QVector ограничена размером чуть менее 2 ГБ (2^31 байт).