Описание класса QVectorКласс QVector - это шаблонный класс, предоставляющий динамический массив. Далее... #include <QVector> От него наследуются: Q3ValueVector, QPolygon, QPolygonF, QStack и QXmlStreamAttributes. Замечание: Все функции в этом классе реентерабельны. Открытые типы
Открытые функции
Статические открытые члены
Связанные нечлены класса
Подробное описаниеКласс QVector - это шаблонный класс, предоставляющий динамический массив. QVector<T> является одним из общих контейнерных классов Qt. Он хранит свои элементы в смежных ячейках памяти и обеспечивает быстрый доступ по индексу. QList<T>, QLinkedList<T> и QVarLengthArray<T> предоставляют схожую функциональность. Вот краткий обзор:
Вот пример QVector, который хранит целые числа, и QVector, который хранит значения QString: QVector<int> integerVector; QVector<QString> stringVector; QVector сохраняет вектор (или массив) элементов. Как правило, векторы создаются с начальным размером. Например, следующий код создаёт QVector с 200 элементами: QVector<QString> vector(200); Элементы автоматически инициализируются значениями, создаваемыми по умолчанию. Если вы хотите инициализировать вектор другими значениями, передайте это значение как второй аргумент в конструктор: QVector<QString> vector(200, "Pass"); Вы также можете в любое время вызвать fill() для заполнения вектора нужным значением. QVector использует индексы, начинающиеся с 0, как принято в массивах C++. Для доступа к элементу с позицией по определённому индексу вы можете использовать operator[](). В неконстантных векторах operator[]() возвращает ссылку на элемент, который может быть использован с левой стороны присваивания: if (vector[0] == "Liz") vector[0] = "Elizabeth"; Для доступа "только для чтения" существует альтернативный синтаксис at(): for (int i = 0; i < vector.size(); ++i) { if (vector.at(i) == "Alfonso") cout << "Found Alfonso at position " << i << endl; } at() может работать быстрее, чем operator[](), потому что при этом никогда не создается полной копии. Другим способом получения доступа к данным, сохранённым в QVector, является вызов data(). Функция возвращает указатель на первый элемент в векторе. Вы можете использовать указатель для прямого доступа и изменения элементов, хранящихся в векторе. Указатель также полезен в том случае, если вам необходимо передать QVector в функцию, принимающую простой массив C++. Если вы хотите найти все вхождения определённого значения в векторе, то используйте indexOf() или lastIndexOf(). Первая функция осуществляет поиск вперед от указанной позиции, а последняя - осуществляет поиск назад. Обе возвращают индекс соответствующего элемента, если он найден; в противном случае возвращается -1. Например: int i = vector.indexOf("Harumi"); if (i != -1) cout << "First occurrence of Harumi is at position " << i << endl; Если вам необходимо просто проверить, содержит ли вектор определённое значение, то используйте contains(). Если вы хотите узнать, как много раз определённое значение входит в вектор, используйте count(). QVector предоставляет основные функции для добавления, перемещения и удаления элементов: insert(), replace(), remove(), prepend(), append(). За исключением append() и replace() эти функции могут быть медленными (линейное время) на больших векторах, поскольку они требуют перемещения в памяти по одному множества элементов в векторе. Если вам необходим контейнерный класс, который предоставляет быструю вставку/удаление в середину, используйте вместо этого QList или QLinkedList. В отличие от простых массивов C++, размер QVector можно изменить в любое время, вызвав resize(). Если новый размер больше, чем старый, то QVector, возможно, потребуется перераспределить целый вектор. QVector пытается сократить количество перераспределений, предварительно выделяя вдвое больше памяти, чем необходимо для фактических данных. Если вы заранее знаете, сколько приблизительно элементов будет содержать QVector, то вы можете вызвать reserve(), указывая QVector заранее выделить определённый объём памяти. Вы можете также вызвать capacity() для определения количества памяти, которую в действительности занял QVector. Заметьте, что использование неконстантных операторов и функций может заставить QVector сделать глубокую копию данных. Это связано с неявным совместным использованием. Тип значений QVector должен быть присваиваемого типа данных. Это охватывает большинство обычно используемых типов данных, но компилятор не позволит вам хранить как значение, например, QWidget; вместо этого сохраняйте QWidget *. Некоторые функции имеют дополнительные требования; например, indexOf() и lastIndexOf() ожидают, что тип значения поддерживает operator==(). Эти требования отражены в описании функций. Подобно другим контейнерным классам QVector предоставляет итераторы в стиле Java (QVectorIterator и QMutableVectorIterator) и итераторы в стиле STL (QVector::const_iterator и QVector::iterator). На практике они используются редко, поэтому вы можете использовать индексы QVector . В дополнении к QVector Qt также предоставляет QVarLengthArray, очень низкоуровневый класс с небольшой функциональностью, которая оптимизирована для скорости. QVector не поддерживает вставку, добавление в конец, добавление в начало и замену ссылками на свои значения. Это может привести к прерыванию работы вашего приложения с сообщением об ошибке. Смотрите также QVectorIterator, QMutableVectorIterator, QList и QLinkedList. Описание типов-членовtypedef QVector::ConstIteratorСиноним QVector::const_iterator в стиле Qt. typedef QVector::IteratorСиноним QVector::iterator в стиле Qt. typedef QVector::const_iteratorПсевдоним типа QVector::const_iterator предоставляет константный итератор в стиле STL для QVector и QStack. QVector предоставляет как итераторы в стиле STL, так и итераторы в стиле Java. Константный итератор в стиле STL - это простой псевдоним типа для "const T *" (указатель на const T). Смотрите также QVector::constBegin(), QVector::constEnd(), QVector::iterator и QVectorIterator. typedef QVector::const_pointerПсевдоним типа для const T *. Предоставлен для совместимости с STL. typedef QVector::const_referenceПсевдоним типа для T &. Предоставлен для совместимости с STL. typedef QVector::difference_typeПсевдоним типа для ptrdiff_t. Предоставлен для совместимости с STL. typedef QVector::iteratorПсевдоним типа QVector::iterator предоставляет неконстантный итератор в стиле STL для QVector и QStack. QVector предоставляет как итераторы в стиле STL, так и итераторы в стиле Java. Неконстантный итератор в стиле STL - это просто псевдоним типа для "T *" (указатель на T). Смотрите также QVector::begin(), QVector::end(), QVector::const_iterator и QMutableVectorIterator. typedef QVector::pointerПсевдоним типа для T *. Предоставлен для совместимости с STL. typedef QVector::referenceПсевдоним типа для T &. Предоставлен для совместимости с STL. typedef QVector::size_typeПсевдоним типа для int. Предоставлен для совместимости с STL. typedef QVector::value_typeПсевдоним типа для T. Предоставлен для совместимости с STL. Описание функций-членовQVector::QVector ()Создаёт пустой вектор. Смотрите также resize(). QVector::QVector ( int size )Создаёт вектор с начальным размером в size элементов. Элементы инициализируются значениями, создаваемыми по умолчанию. Смотрите также resize(). QVector::QVector ( int size, const T & value )Создаёт вектор с начальным размером в size элементов. Каждый элемент инициализируется значением value. Смотрите также resize() и fill(). QVector::QVector ( const QVector<T> & other )Создаёт копию other. Эта операция требует постоянного времени, поскольку QVector неявно разделяет данные. Это делает возвращение QVector, как результата функции, очень быстрым. Если экземпляр с разделением данных изменяется, то он будет скопирован (copy-on-write), и это потребует линейного времени. Смотрите также operator=(). QVector::QVector ( std::initializer_list<T> args )Создаёт вектор из std::initilizer_list, заданного args. Этот конструктор включён только в том случае, если компилятор поддерживает C++0x. Эта функция была введена в Qt 4.8. QVector::~QVector ()Уничтожает вектор. void QVector::append ( const T & value )Вставляет значение value в конец вектора. Пример: QVector<QString> vector(0); vector.append("one"); vector.append("two"); vector.append("three"); // vector: ["one", "two", "three"] Это то же самое, что и вызов resize(size() + 1) и присвоение значения value новому последнему элементу в векторе. Эта операция относительно быстрая, поскольку QVector обычно выделяет больше памяти, чем необходимо, так что он может увеличиваться, не перераспределяя каждый раз вектор. Смотрите также operator<<(), prepend() и insert(). const T & QVector::at ( int i ) constВозвращает элемент в позиции с индексом i в векторе. i должен быть действительным индексом в векторе (т.е. 0 <= i < size()). Смотрите также value() и operator[](). reference QVector::back ()Эта функция обеспечивает совместимость с STL. Это эквивалентно last(). const_reference QVector::back () constЭто перегруженная функция. iterator QVector::begin ()Возвращает итератор в стиле STL, указывающий на первый элемент в векторе. Смотрите также constBegin() и end(). const_iterator QVector::begin () constЭто перегруженная функция. int QVector::capacity () constВозвращает максимальное число элементов, которые могут быть сохранены в векторе без дополнительного перераспределения в памяти. Единственная цель этой функции - обеспечить оптимальное использование памяти QVector. Вообще, у вас крайне редко возникнет необходимость вызывать эту функцию. Если вы хотите узнать количество элементов в векторе, используйте size(). Смотрите также reserve() и squeeze(). void QVector::clear ()Удаляет все элементы из вектора и освобождает память, используемую вектором. const_iterator QVector::constBegin () constВозвращает константный итератор в стиле STL, указывающий на первый элемент в векторе. Смотрите также begin() и constEnd(). const T * QVector::constData () constВозвращает константный указатель на данные, хранящиеся в векторе. Указатель может быть использован для доступа к элементам в векторе. Указатель остается действительным до тех пор, пока вектор не будет перераспределен в памяти. Эта функция наиболее полезна для передачи вектора в функцию, которая принимает простой массив C++. Смотрите также data() и operator[](). const_iterator QVector::constEnd () constВозвращает константный итератор в стиле STL, указывающий на воображаемый элемент после последнего элемента в векторе. Смотрите также constBegin() и end(). bool QVector::contains ( const T & value ) constВозвращает true, если вектор содержит вхождение значения value; в противном случае возвращает false. Эта функция требует, чтобы у типа значения существовала реализация operator==(). Смотрите также indexOf() и count(). int QVector::count ( const T & value ) constВозвращает количество вхождений значения value в векторе. Эта функция требует, чтобы у типа значения существовала реализация operator==(). Смотрите также contains() и indexOf(). int QVector::count () constЭто перегруженная функция. То же, что и size(). T * QVector::data ()Возвращает указатель на данные, хранящиеся в векторе. Указатель может быть использован для доступа и изменения элементов в векторе. Пример: QVector<int> vector(10); int *data = vector.data(); for (int i = 0; i < 10; ++i) data[i] = 2 * i; Указатель остается действительным до тех пор, пока вектор не будет перераспределен в памяти. Эта функция наиболее полезна для передачи вектора в функцию, которая принимает простой массив C++. Смотрите также constData() и operator[](). const T * QVector::data () constЭто перегруженная функция. bool QVector::empty () constЭта функция обеспечивает совместимость с STL. Это эквивалентно isEmpty(), возвращая true, если вектор пуст; в противном случае возвращает false. iterator QVector::end ()Возвращает итератор в стиле STL, указывающий на воображаемый элемент после последнего элемента в векторе. Смотрите также begin() и constEnd(). const_iterator QVector::end () constЭто перегруженная функция. bool QVector::endsWith ( const T & value ) constВозвращает true, если этот вектор не пустой и его последний элемент равен value; в противном случае возвращает false. Эта функция была введена в Qt 4.5. Смотрите также isEmpty() и last(). iterator QVector::erase ( iterator pos )Удаляет элемент, на который указывает итератор pos, из вектора и возвращает итератор на следующий элемент в векторе (который может быть end()). Смотрите также insert() и remove(). iterator QVector::erase ( iterator begin, iterator end )Это перегруженная функция. Удаляет все элементы с begin до (но не включая) end. Возвращает итератор на тот же самый элемент, на который ссылался end перед вызовом. QVector<T> & QVector::fill ( const T & value, int size = -1 )Присваивает значение value всем элементам в векторе. Если размер size отличен от -1 (значение по умолчанию), то размер вектора предварительно изменяется на size. Пример: QVector<QString> vector(3); vector.fill("Yes"); // vector: ["Yes", "Yes", "Yes"] vector.fill("oh", 5); // vector: ["oh", "oh", "oh", "oh", "oh"] Смотрите также resize(). T & QVector::first ()Возвращает ссылку на первый элемент в векторе. Эта функция предполагает, что вектор не пустой. Смотрите также last() и isEmpty(). const T & QVector::first () constЭто перегруженная функция. QVector<T> QVector::fromList ( const QList<T> & list ) [static]Возвращает объект QVector с данными, содержащимися в списке list. Пример: QStringList list; list << "Sven" << "Kim" << "Ola"; QVector<QString> vect = QVector<QString>::fromList(list); // vect: ["Sven", "Kim", "Ola"] Смотрите также toList() и QList::toVector(). QVector<T> QVector::fromStdVector ( const std::vector<T> & vector ) [static]Возвращает объект QVector с данными, содержащимися в векторе vector. Порядок элементов в QVector тот же самый, что и в векторе vector. Пример: std::vector<double> stdvector; vector.push_back(1.2); vector.push_back(0.5); vector.push_back(3.14); QVector<double> vector = QVector<double>::fromStdVector(stdvector); Смотрите также toStdVector() и QList::fromStdList(). T & QVector::front ()Эта функция обеспечивает совместимость с STL. Это эквивалентно first(). const_reference QVector::front () constЭто перегруженная функция. int QVector::indexOf ( const T & value, int from = 0 ) constВозвращает индекс позиции первого вхождения значения value в векторе, поиск осуществляется вперёд, начиная с позиции from. Возвращает -1, если нет соответствующих элементов. Пример: QVector<QString> vector; vector << "A" << "B" << "C" << "B" << "A"; vector.indexOf("B"); // возвращает 1 vector.indexOf("B", 1); // возвращает 1 vector.indexOf("B", 2); // возвращает 3 vector.indexOf("X"); // возвращает -1 Эта функция требует, чтобы у типа значения существовала реализация operator==(). Смотрите также lastIndexOf() и contains(). void QVector::insert ( int i, const T & value )Вставляет значение value в позицию с индексом i в векторе. Если i равно 0, то значение добавляется в начало вектора. Если i равно size(), то значение добавляется в конец вектора. Пример: QVector<QString> vector; vector << "alpha" << "beta" << "delta"; vector.insert(2, "gamma"); // vector: ["alpha", "beta", "gamma", "delta"] Для больших векторов эта операция может быть медленной (линейное время), поскольку она требует перемещения всех элементов в позиции i и последующих на одну позицию далее в памяти. Если вам необходим контейнерный класс, который предоставляет быструю функцию insert(), то используйте вместо этого QLinkedList. Смотрите также append(), prepend() и remove(). iterator QVector::insert ( iterator before, int count, const T & value )Вставляет count копий значения value перед элементом, на который указывает итератор before. Возвращает итератор, указывающий на первый вставленный элемент. void QVector::insert ( int i, int count, const T & value )Это перегруженная функция. Вставляет count копий значения value в позицию с индексом i в векторе. Пример: QVector<double> vector; vector << 2.718 << 1.442 << 0.4342; vector.insert(1, 3, 9.9); // vector: [2.718, 9.9, 9.9, 9.9, 1.442, 0.4342] iterator QVector::insert ( iterator before, const T & value )Это перегруженная функция. Вставляет значение value перед элементом, на который указывает итератор before. Возвращает итератор, указывающий на вставленное значение. bool QVector::isEmpty () constВозвращает true, если вектор имеет размер 0; в противном случае возвращает false. Смотрите также size() и resize(). T & QVector::last ()Возвращает ссылку на последний элемент в векторе. Эта функция предполагает, что вектор не пустой. Смотрите также first() и isEmpty(). const T & QVector::last () constЭто перегруженная функция. int QVector::lastIndexOf ( const T & value, int from = -1 ) constВозвращает индекс позиции последнего вхождения значения value в векторе, поиск осуществляется назад, начиная с позиции с индексом from. Если from равен -1 (по умолчанию), то поиск начинается с последнего элемента. Возвращает -1, если нет соответствующих элементов. Пример: QList<QString> vector; vector << "A" << "B" << "C" << "B" << "A"; vector.lastIndexOf("B"); // returns 3 vector.lastIndexOf("B", 3); // returns 3 vector.lastIndexOf("B", 2); // returns 1 vector.lastIndexOf("X"); // returns -1 Эта функция требует, чтобы у типа значения существовала реализация operator==(). Смотрите также indexOf(). QVector<T> QVector::mid ( int pos, int length = -1 ) constВозвращает вектор, элементы которого скопированы из этого вектора, начиная с позиции pos. Если length равен -1 (по умолчанию), то копируются все элементы после pos; в противном случае копируется length элементов (или все оставшиеся элементы, если их меньше, чем length элементов). void QVector::pop_back ()Эта функция обеспечивает совместимость с STL. Это эквивалентно erase(end() - 1). void QVector::pop_front ()Эта функция обеспечивает совместимость с STL. Это эквивалентно erase(begin()). void QVector::prepend ( const T & value )Вставляет значение value в начало вектора. Пример: QVector<QString> vector; vector.prepend("one"); vector.prepend("two"); vector.prepend("three"); // vector: ["three", "two", "one"] Это то же самое, что и vector.insert(0, value). Для больших векторов это операция может быть медленной (линейное время), поскольку она требует перемещения всех элементов в векторе на одну позицию далее в памяти. Если вам необходим контейнерный класс, который предоставляет быструю функцию prepend(), то используйте вместо этого QList или QLinkedList. Смотрите также append() и insert(). void QVector::push_back ( const T & value )Эта функция обеспечивает совместимость с STL. Это эквивалентно append(value). void QVector::push_front ( const T & value )Эта функция обеспечивает совместимость с STL. Это эквивалентно prepend(value). void QVector::remove ( int i )Это перегруженная функция. Удаляет элемент в позиции с индексом i. Смотрите также insert(), replace() и fill(). void QVector::remove ( int i, int count )Это перегруженная функция. Удаляет count элементов из середины вектора, начиная с позиции с индексом i. Смотрите также insert(), replace() и fill(). void QVector::replace ( int i, const T & value )Заменяет элемент в позиции с индексом i на value. i должен быть действительным индексом в векторе (т.е. 0 <= i < size()). Смотрите также operator[]() и remove(). void QVector::reserve ( int size )Пытается зарезервировать место в памяти размером, по крайней мере, size элементов. Если вы знаете наперёд, насколько большим будет вектор, то вы можете вызвать эту функцию, и, если вы вызываете resize() много раз, то, возможно, получите лучшую производительность. Если size недооценён, то самое худшее, что может произойти, это то, что QVector будет работать медленнее. Единственная цель этой функции - обеспечить оптимальное использование памяти QVector. Вообще, у вас крайне редко возникнет необходимость вызывать эту функцию. Если вы желаете изменить размер вектора, то вызовите resize(). Смотрите также squeeze() и capacity(). void QVector::resize ( int size )Устанавливает размер вектора в size. Если size больше, чем текущий размер, то элементы добавляются в конец; новые элементы инициализируются значениями, создаваемыми по умолчанию. Если size меньше, чем текущий размер, то элементы удаляются из конца. Смотрите также size(). int QVector::size () constВозвращает количество элементов в векторе. Смотрите также isEmpty() и resize(). void QVector::squeeze ()Освобождает любую память, не требующуюся для хранения элементов. Единственная цель этой функции - обеспечить оптимальное использование памяти QVector. Вообще, у вас крайне редко возникнет необходимость вызывать эту функцию. Смотрите также reserve() и capacity(). bool QVector::startsWith ( const T & value ) constВозвращает true, если этот вектор не пустой и его первый элемент равен value; в противном случае возвращает false. Эта функция была введена в Qt 4.5. Смотрите также isEmpty() и first(). void QVector::swap ( QVector<T> & other )Меняет вектор other с этим вектором. Эта операция очень быстрая и не может завершиться ошибкой. Эта функция была введена в Qt 4.8. QList<T> QVector::toList () constВозвращает объект QList с данными, содержащимися в этом QVector. Пример: QVector<QString> vect; vect << "red" << "green" << "blue" << "black"; QList<QString> list = vect.toList(); // list: ["red", "green", "blue", "black"] Смотрите также fromList() и QList::fromVector(). std::vector<T> QVector::toStdVector () constВозвращает объект std::vector с данными, содержащимися в этом QVector. Пример: QVector<double> vector; vector << 1.2 << 0.5 << 3.14; std::vector<double> stdvector = vector.toStdVector(); Смотрите также fromStdVector() и QList::toStdList(). T QVector::value ( int i ) constВозвращает значение в позиции с индексом i в векторе. Если индекс i находится за границами, то функция возвращает значение, создаваемое по умолчанию. Если вы уверены, что i находится в допустимых границах, то вы можете использовать вместо этого at(), которая немного быстрее. Смотрите также at() и operator[](). T QVector::value ( int i, const T & defaultValue ) constЭто перегруженная функция. Если индекс i находится за границами, то функция возвращает defaultValue. bool QVector::operator!= ( const QVector<T> & other ) constВозвращает true, если other не равен этому вектору; в противном случае возвращает false. Два вектора считаются равными, если они содержат одинаковые значения в одинаковом порядке. Эта функция требует, чтобы у типа значения существовала реализация operator==(). Смотрите также operator==(). QVector<T> QVector::operator+ ( const QVector<T> & other ) constВозвращает вектор, который содержит все элементы из этого вектора, следующие за всеми элементами из вектора other. Смотрите также operator+=(). QVector<T> & QVector::operator+= ( const QVector<T> & other )Добавляет элементы вектора other к этому вектору и возвращает ссылку на этот вектор. Смотрите также operator+() и append(). QVector<T> & QVector::operator+= ( const T & value )Это перегруженная функция. Добавляет значение value в вектор. Смотрите также append() и operator<<(). QVector<T> & QVector::operator<< ( const T & value )Добавляет значение value в вектор и возвращает ссылку на этот вектор. Смотрите также append() и operator+=(). QVector<T> & QVector::operator<< ( const QVector<T> & other )Добавляет other к вектору и возвращает ссылку на вектор. QVector<T> & QVector::operator= ( const QVector<T> & other )Присваивает other этому вектору и возвращает ссылку на этот вектор. bool QVector::operator== ( const QVector<T> & other ) constВозвращает true, если other равен этому вектору; в противном случае возвращает false. Два вектора считаются равными, если они содержат одинаковые значения в одинаковом порядке. Эта функция требует, чтобы у типа значения существовала реализация operator==(). Смотрите также operator!=(). T & QVector::operator[] ( int i )Возвращает элемент в позиции с индексом i как изменяемую ссылку. i должен быть действительным индексом в векторе (т.е. 0 <= i < size()). Заметьте, что использование неконстантных операторов может заставить QVector сделать глубокую копию. Смотрите также at() и value(). const T & QVector::operator[] ( int i ) constЭто перегруженная функция. Тоже самое, что и at(i). Связанные нечлены классаQDataStream & operator<< ( QDataStream & out, const QVector<T> & vector )Записывает вектор vector в поток out. Эта функция требует, чтобы у типа значения была реализация operator<<(). Смотрите также Формат операторов QDataStream. QDataStream & operator>> ( QDataStream & in, QVector<T> & vector )Читает вектор из потока in в vector. Эта функция требует, чтобы у типа значения была реализация operator>>(). Смотрите также Формат операторов QDataStream. |
Попытка перевода Qt документации. Если есть желание присоединиться, или если есть замечания или пожелания, то заходите на форум: Перевод Qt документации на русский язык... Люди внесшие вклад в перевод: Команда переводчиков |