2013-07-23 7 views
1

Я попытался добавить 100 000 элементов QString (каждая QString имеет около 10 символов) в QVector. После этого программа выходит из строя. Существуют ли некоторые ограничения на количество элементов, которые может содержать QVector (помимо физических ограничений памяти)? Кроме того, я думаю, что у вас много свободной памяти, достаточно, чтобы хранить такую ​​связку строк. Что я делаю не так?Максимальный размер для QVector?

+1

Количество элементов ограничено лимитом int (около 2 миллиардов). Ваша проблема будет в размере того, что вы вкладываете в нее. Или некоторые проблемы с копированием того, что вы вкладываете в него. – paulm

+1

Можете ли вы показать минимальный пример неудачного кода? И, кстати, [QList обычно рекомендуется по QVector] (http://qt-project.org/doc/qt-5.0/qtcore/containers.html#the-container-classes). –

+0

показать код, избегать спекуляций. Btw более подробно объясните, какой вид сбоя вы наблюдаете – UmNyobe

ответ

1

Попробуйте использовать QStringList в качестве рекомендации. Я сомневаюсь, что 100 тыс. Строк будут проблемой памяти.

QStringList tlist; 
for(int i=0;i<100000;i++) 
    tlist.append("1234567890"); 

работает совершенно нормально в моей среде

2

Из документации.

Класс QVector шаблонный класс, который обеспечивает динамический массив ... Она хранит свои элементы в смежных ячейках памяти и обеспечивает быстрый доступ по индексу.

Зная это лучший способ добавляемых большое количество элементов для резервирования памяти либо с помощью

QVector<QString> vector(100000);//or 
vector.reserve(100000); 

Это позволяет избежать перемещения в несколько раз память.