Описание класса QVector
|
typedef | ConstIterator |
typedef | Iterator |
typedef | const_iterator |
typedef | const_pointer |
typedef | const_reference |
typedef | difference_type |
typedef | iterator |
typedef | pointer |
typedef | reference |
typedef | size_type |
typedef | value_type |
QVector () | |
QVector ( int size ) | |
QVector ( int size, const T & value ) | |
QVector ( const QVector<T> & other ) | |
~QVector () | |
void | append ( const T & value ) |
const T & | at ( int i ) const |
reference | back () |
const_reference | back () const |
iterator | begin () |
const_iterator | begin () const |
int | capacity () const |
void | clear () |
const_iterator | constBegin () const |
const T * | constData () const |
const_iterator | constEnd () const |
bool | contains ( const T & value ) const |
int | count ( const T & value ) const |
int | count () const |
T * | data () |
const T * | data () const |
bool | empty () const |
iterator | end () |
const_iterator | end () const |
bool | endsWith ( const T & value ) const |
iterator | erase ( iterator pos ) |
iterator | erase ( iterator begin, iterator end ) |
QVector<T> & | fill ( const T & value, int size = -1 ) |
T & | first () |
const T & | first () const |
T & | front () |
const_reference | front () const |
int | indexOf ( const T & value, int from = 0 ) const |
void | insert ( int i, const T & value ) |
iterator | insert ( iterator before, int count, const T & value ) |
void | insert ( int i, int count, const T & value ) |
iterator | insert ( iterator before, const T & value ) |
bool | isEmpty () const |
T & | last () |
const T & | last () const |
int | lastIndexOf ( const T & value, int from = -1 ) const |
QVector<T> | mid ( int pos, int length = -1 ) const |
void | pop_back () |
void | pop_front () |
void | prepend ( const T & value ) |
void | push_back ( const T & value ) |
void | push_front ( const T & value ) |
void | remove ( int i ) |
void | remove ( int i, int count ) |
void | replace ( int i, const T & value ) |
void | reserve ( int size ) |
void | resize ( int size ) |
int | size () const |
void | squeeze () |
bool | startsWith ( const T & value ) const |
QList<T> | toList () const |
std::vector<T> | toStdVector () const |
T | value ( int i ) const |
T | value ( int i, const T & defaultValue ) const |
bool | operator!= ( const QVector<T> & other ) const |
QVector<T> | operator+ ( const QVector<T> & other ) const |
QVector<T> & | operator+= ( const QVector<T> & other ) |
QVector<T> & | operator+= ( const T & value ) |
QVector<T> & | operator<< ( const T & value ) |
QVector<T> & | operator<< ( const QVector<T> & other ) |
QVector<T> & | operator= ( const QVector<T> & other ) |
bool | operator== ( const QVector<T> & other ) const |
T & | operator[] ( int i ) |
const T & | operator[] ( int i ) const |
QVector<T> | fromList ( const QList<T> & list ) |
QVector<T> | fromStdVector ( const std::vector<T> & vector ) |
QDataStream & | operator<< ( QDataStream & out, const QVector<T> & vector ) |
QDataStream & | operator>> ( QDataStream & in, QVector<T> & vector ) |
Класс 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.
Синоним QVector::const_iterator в стиле Qt.
Синоним QVector::iterator в стиле Qt.
Псевдоним типа QVector::const_iterator предоставляет константный итератор в стиле STL для QVector и QStack.
QVector предоставляет как итераторы в стиле STL, так и итераторы в стиле Java. Константный итератор в стиле STL - это простой псевдоним типа для "const T *" (указатель на const T).
Смотрите также QVector::constBegin(), QVector::constEnd(), QVector::iterator и QVectorIterator.
Псевдоним типа для const T *. Предоставлен для совместимости с STL.
Псевдоним типа для T &. Предоставлен для совместимости с STL.
Псевдоним типа для ptrdiff_t. Предоставлен для совместимости с STL.
Псевдоним типа QVector::iterator предоставляет неконстантный итератор в стиле STL для QVector и QStack.
QVector предоставляет как итераторы в стиле STL, так и итераторы в стиле Java. Неконстантный итератор в стиле STL - это просто псевдоним типа для "T *" (указатель на T).
Смотрите также QVector::begin(), QVector::end(), QVector::const_iterator и QMutableVectorIterator.
Псевдоним типа для T *. Предоставлен для совместимости с STL.
Псевдоним типа для T &. Предоставлен для совместимости с STL.
Псевдоним типа для int. Предоставлен для совместимости с STL.
Псевдоним типа для T. Предоставлен для совместимости с STL.
Создаёт пустой вектор.
Смотрите также resize().
Создаёт вектор с начальным размером в size элементов.
Элементы инициализируются значениями, создаваемыми по умолчанию.
Смотрите также resize().
Создаёт вектор с начальным размером в size элементов. Каждый элемент инициализируется значением value.
Смотрите также resize() и fill().
Создаёт копию other.
Эта операция требует постоянного времени, поскольку QVector неявно разделяет данные. Это делает возвращение QVector, как результата функции, очень быстрым. Если экземпляр с разделением данных изменяется, то он будет скопирован (copy-on-write), и это потребует линейного времени.
Смотрите также operator=().
Уничтожает вектор.
Вставляет значение 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().
Возвращает элемент в позиции с индексом i в векторе.
i должен быть действительным индексом в векторе (т.е. 0 <= i < size()).
Смотрите также value() и operator[]().
Эта функция обеспечивает совместимость с STL. Это эквивалентно last().
Это перегруженная функция.
Возвращает итератор в стиле STL, указывающий на первый элемент в векторе.
Смотрите также constBegin() и end().
Это перегруженная функция.
Возвращает максимальное число элементов, которые могут быть сохранены в векторе без дополнительного перераспределения в памяти.
Единственная цель этой функции - обеспечить оптимальное использование памяти QVector. Вообще, у вас крайне редко возникнет необходимость вызывать эту функцию. Если вы хотите узнать количество элементов в векторе, используйте size().
Смотрите также reserve() и squeeze().
Удаляет все элементы из вектора и освобождает память, используемую вектором.
Возвращает константный итератор в стиле STL, указывающий на первый элемент в векторе.
Смотрите также begin() и constEnd().
Возвращает константный указатель на данные, хранящиеся в векторе. Указатель может быть использован для доступа к элементам в векторе. Указатель остается действительным до тех пор, пока вектор не будет перераспределен в памяти.
Эта функция наиболее полезна для передачи вектора в функцию, которая принимает простой массив C++.
Смотрите также data() и operator[]().
Возвращает константный итератор в стиле STL, указывающий на воображаемый элемент после последнего элемента в векторе.
Смотрите также constBegin() и end().
Возвращает true, если вектор содержит вхождение значения value; в противном случае возвращает false.
Эта функция требует, чтобы у типа значения существовала реализация operator==().
Смотрите также indexOf() и count().
Возвращает количество вхождений значения value в векторе.
Эта функция требует, чтобы у типа значения существовала реализация operator==().
Смотрите также contains() и indexOf().
Это перегруженная функция.
То же, что и size().
Возвращает указатель на данные, хранящиеся в векторе. Указатель может быть использован для доступа и изменения элементов в векторе.
Пример:
QVector<int> vector(10); int *data = vector.data(); for (int i = 0; i < 10; ++i) data[i] = 2 * i;
Указатель остается действительным до тех пор, пока вектор не будет перераспределен в памяти.
Эта функция наиболее полезна для передачи вектора в функцию, которая принимает простой массив C++.
Смотрите также constData() и operator[]().
Это перегруженная функция.
Эта функция обеспечивает совместимость с STL. Это эквивалентно isEmpty(), возвращая true, если вектор пуст; в противном случае возвращает false.
Возвращает итератор в стиле STL, указывающий на воображаемый элемент после последнего элемента в векторе.
Смотрите также begin() и constEnd().
Это перегруженная функция.
Возвращает true, если этот вектор не пустой и его последний элемент равен value; в противном случае возвращает false.
Эта функция была введена в Qt 4.5.
Смотрите также isEmpty() и last().
Удаляет элемент, на который указывает итератор pos, из вектора и возвращает итератор на следующий элемент в векторе (который может быть end()).
Смотрите также insert() и remove().
Это перегруженная функция.
Удаляет все элементы с begin до (но не включая) end. Возвращает итератор на тот же самый элемент, на который ссылался end перед вызовом.
Присваивает значение 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().
Возвращает ссылку на первый элемент в векторе. Эта функция предполагает, что вектор не пустой.
Смотрите также last() и isEmpty().
Это перегруженная функция.
Возвращает объект QVector с данными, содержащимися в списке list.
Пример:
QStringList list;
list << "Sven" << "Kim" << "Ola";
QVector<QString> vect = QVector<QString>::fromList(list);
// vect: ["Sven", "Kim", "Ola"]
Смотрите также toList() и QList::toVector().
Возвращает объект 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().
Эта функция обеспечивает совместимость с STL. Это эквивалентно first().
Это перегруженная функция.
Возвращает индекс позиции первого вхождения значения 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().
Вставляет значение 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().
Вставляет count копий значения value перед элементом, на который указывает итератор before. Возвращает итератор, указывающий на первый вставленный элемент.
Это перегруженная функция.
Вставляет 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]
Это перегруженная функция.
Вставляет значение value перед элементом, на который указывает итератор before. Возвращает итератор, указывающий на вставленное значение.
Возвращает true, если вектор имеет размер 0; в противном случае возвращает false.
Смотрите также size() и resize().
Возвращает ссылку на последний элемент в векторе. Эта функция предполагает, что вектор не пустой.
Смотрите также first() и isEmpty().
Это перегруженная функция.
Возвращает индекс позиции последнего вхождения значения value в векторе, поиск осуществляется назад, начиная с позиции с индексом from. Если from равен -1 (по умолчанию), то поиск начинается с последнего элемента. Возвращает -1, если нет соответствующих элементов.
Пример:
QList<QString> vector; vector << "A" << "B" << "C" << "B" << "A"; vector.lastIndexOf("B"); // возвращает 3 vector.lastIndexOf("B", 3); // возвращает 3 vector.lastIndexOf("B", 2); // возвращает 1 vector.lastIndexOf("X"); // возвращает -1
Эта функция требует, чтобы у типа значения существовала реализация operator==().
Смотрите также indexOf().
Возвращает вектор, элементы которого скопированы из этого вектора, начиная с позиции pos. Если length равен -1 (по умолчанию), то копируются все элементы после pos; в противном случае копируется length элементов (или все оставшиеся элементы, если их меньше, чем length элементов).
Эта функция обеспечивает совместимость с STL. Это эквивалентно erase(end() - 1).
Эта функция обеспечивает совместимость с STL. Это эквивалентно erase(begin()).
Вставляет значение 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().
Эта функция обеспечивает совместимость с STL. Это эквивалентно append(value).
Эта функция обеспечивает совместимость с STL. Это эквивалентно prepend(value).
Это перегруженная функция.
Удаляет элемент в позиции с индексом i.
Смотрите также insert(), replace() и fill().
Это перегруженная функция.
Удаляет count элементов из середины вектора, начиная с позиции с индексом i.
Смотрите также insert(), replace() и fill().
Заменяет элемент в позиции с индексом i на value.
i должен быть действительным индексом в векторе (т.е. 0 <= i < size()).
Смотрите также operator[]() и remove().
Пытается зарезервировать место в памяти размером, по крайней мере, size элементов. Если вы знаете наперёд, насколько большим будет вектор, то вы можете вызвать эту функцию, и, если вы вызываете resize() много раз, то, возможно, получите лучшую производительность. Если size недооценён, то самое худшее, что может произойти, это то, что QVector будет работать медленнее.
Единственная цель этой функции - обеспечить оптимальное использование памяти QVector. Вообще, у вас крайне редко возникнет необходимость вызывать эту функцию. Если вы желаете изменить размер вектора, то вызовите resize().
Смотрите также squeeze() и capacity().
Устанавливает размер вектора в size. Если size больше, чем текущий размер, то элементы добавляются в конец; новые элементы инициализируются значениями, создаваемыми по умолчанию. Если size меньше, чем текущий размер, то элементы удаляются из конца.
Смотрите также size().
Возвращает количество элементов в векторе.
Смотрите также isEmpty() и resize().
Освобождает любую память, не требующуюся для хранения элементов.
Единственная цель этой функции - обеспечить оптимальное использование памяти QVector. Вообще, у вас крайне редко возникнет необходимость вызывать эту функцию.
Смотрите также reserve() и capacity().
Возвращает true, если этот вектор не пустой и его первый элемент равен value; в противном случае возвращает false.
Эта функция была введена в Qt 4.5.
Смотрите также isEmpty() и first().
Возвращает объект QList с данными, содержащимися в этом QVector.
Пример:
QVector<double> vect;
vect << "red" << "green" << "blue" << "black";
QList<double> list = vect.toList();
// list: ["red", "green", "blue", "black"]
Смотрите также fromList() и QList::fromVector().
Возвращает объект std::vector с данными, содержащимися в этом QVector. Пример:
QVector<double> vector; vector << 1.2 << 0.5 << 3.14; std::vector<double> stdvector = vector.toStdVector();
Смотрите также fromStdVector() и QList::toStdList().
Возвращает значение в позиции с индексом i в векторе.
Если индекс i находится за границами, то функция возвращает значение, создаваемое по умолчанию. Если вы уверены, что i находится в допустимых границах, то вы можете использовать вместо этого at(), которая немного быстрее.
Смотрите также at() и operator[]().
Это перегруженная функция.
Если индекс i находится за границами, то функция возвращает defaultValue.
Возвращает true, если other не равен этому вектору; в противном случае возвращает false.
Два вектора считаются равными, если они содержат одинаковые значения в одинаковом порядке.
Эта функция требует, чтобы у типа значения существовала реализация operator==().
Смотрите также operator==().
Возвращает вектор, который содержит все элементы из этого вектора, следующие за всеми элементами из вектора other.
Смотрите также operator+=().
Добавляет элементы вектора other к этому вектору и возвращает ссылку на этот вектор.
Смотрите также operator+() и append().
Это перегруженная функция.
Добавляет значение value в вектор.
Смотрите также append() и operator<<().
Добавляет значение value в вектор и возвращает ссылку на этот вектор.
Смотрите также append() и operator+=().
Добавляет other к вектору и возвращает ссылку на вектор.
Присваивает other этому вектору и возвращает ссылку на этот вектор.
Возвращает true, если other равен этому вектору; в противном случае возвращает false.
Два вектора считаются равными, если они содержат одинаковые значения в одинаковом порядке.
Эта функция требует, чтобы у типа значения существовала реализация operator==().
Смотрите также operator!=().
Возвращает элемент в позиции с индексом i как изменяемую ссылку.
i должен быть действительным индексом в векторе (т.е. 0 <= i < size()).
Заметьте, что использование неконстантных операторов может заставить QVector сделать глубокую копию.
Смотрите также at() и value().
Это перегруженная функция.
Тоже самое, что и at(i).
Записывает вектор vector в поток out.
Эта функция требует, чтобы у типа значения была реализация operator<<().
Смотрите также Формат операторов QDataStream.
Читает вектор из потока in в vector.
Эта функция требует, чтобы у типа значения была реализация operator>>().
Смотрите также Формат операторов QDataStream.
Авторские права © 2010 Nokia Corporation и/или её дочерние компании | Торговые марки | Qt 4.6.4 |
Попытка перевода Qt документации. Если есть желание присоединиться, или если есть замечания или пожелания, то заходите на форум: Перевод Qt документации на русский язык... Люди внесшие вклад в перевод: Команда переводчиков |