Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
VC_Lect.doc
Скачиваний:
6
Добавлен:
01.07.2025
Размер:
15 Мб
Скачать
☆

Пример использования конструкторов

#include <vector>

#include <iostream>

int main( )

{

using namespace std;

vector <int>::iterator v1_Iter, v2_Iter, v3_Iter, v4_Iter, v5_Iter;

// 1 Create an empty vector v0

vector <int> v0;

// 3 Create a vector v1 with 3 elements of default value 0

vector <int> v1( 3 );

// 4 Create a vector v2 with 5 elements of value 2

vector <int> v2( 5, 2);

// 5 Create a vector v3 with 3 elements of value 1 and with the

// allocator of vector v2

vector <int> v3( 3, 1, v2.get_allocator( ) );

// 6 Create a copy, vector v4, of vector v2

vector <int> v4( v2 );

// Create a vector v5 by copying the range v4[_First, _Last)

vector <int> v5( v4.begin( ) + 1, v4.begin( ) + 3 );

cout << "v1 =" ;

for ( v1_Iter = v1.begin( ) ; v1_Iter != v1.end( ) ; v1_Iter++ )

cout << " " << *v1_Iter;

cout << endl;

cout << "v2 =" ;

for ( v2_Iter = v2.begin( ) ; v2_Iter != v2.end( ) ; v2_Iter++ )

cout << " " << *v2_Iter;

cout << endl;

cout << "v3 =" ;

for ( v3_Iter = v3.begin( ) ; v3_Iter != v3.end( ) ; v3_Iter++ )

cout << " " << *v3_Iter;

cout << endl;

cout << "v4 =" ;

for ( v4_Iter = v4.begin( ) ; v4_Iter != v4.end( ) ; v4_Iter++ )

cout << " " << *v4_Iter;

cout << endl;

cout << "v5 =";

for ( v5_Iter = v5.begin( ) ; v5_Iter != v5.end( ) ; v5_Iter++ )

cout << " " << *v5_Iter;

cout << endl;

}

Результат выполнения программы:

v1 = 0 0 0

v2 = 2 2 2 2 2

v3 = 1 1 1

v4 = 2 2 2 2 2

v5 = 2 2

20.5.2.Функции-члены класса vector

20.5.2.1.Функция vector::assign()

Уничтожает вектор и копирует указанные элементы во вновь созданный вектор.

void assign( size_type _Count, const Type& _Val);

template<class InputIterator>

void assign(InputIterator _First, InputIterator _Last);

Параметры

_First

Позиция первого элемента вектора, который будет копироваться.

_Last

Позиция первого элемента вектора за границей диапазона элементов, которые будут копироваться.

_Count

Количество копий элемента, которое должно быть вставлено в вектор.

_Val

Значение элемента, которое должно быть вставлено в вектор.

Замечания

После удаления всех существующих элементов вектора функция assign() вставляет заданный диапазон значений из исходного вектора или вставляет указанное число элементов _Count с заданным значением _Val в вектор.

Пример

#include <vector>

int main( )

{

vector <int> v1,v2,v3;

vector <int>::iterator Iter;

v1.push_back( 10 );

v1.push_back( 20 );

v1.push_back( 30 );

v1.push_back( 40 );

v1.push_back( 50 );

cout << "v1 = " ;

for ( Iter = v1.begin(); Iter != v1.end();Iter++) cout << *Iter << " ";

cout << endl;

v2.assign(v1.begin()+1, v1.end());

cout << "v2 = ";

for (Iter = v2.begin(); Iter != v2.end(); Iter++)

cout << *Iter << " ";

cout << endl;

v3.assign(7, 4) ;

cout << "v3 = ";

for (int i = 0; i<v3.size(); i++)

cout << v3[i] << " ";

cout << endl;

cout<<"v1==v2 = "<<(v1==v2)<<endl;

}

Вывод программы

v1 = 50 10 20 30 40

v2 = 20 30 40 50

v3 = 4 4 4 4 4 4 4

v1==v2 = 0

20.5.2.2.Функция vector::at()

Возвращает ссылку на элемент в указанной позиции вектора.

reference at(size_type _Pos);

const_reference at(size_type _Pos) const;

Параметр

_Pos

Позиция (индекс) элемента вектора, на который будет получена ссылка.

Возвращаемое значение

Ссылка на указанный элемент. Если значение _Pos вне диапазона, возникает ИС out_of_range.

Замечания

Если возвращаемое значение присваивается константной ссылке, то вектор не может быть модифицирован, а в противном случае – может.

Пример

#include <vector>

#include <iostream>

int main( )

{

using namespace std;

vector <int> v1;

v1.push_back( 10 );

v1.push_back( 20 );

const int &i = v1.at( 0 );

int &j = v1.at( 1 );

cout << "The first element is " << i << endl;

cout << "The second element is " << j << endl;

}

Вывод программы

The first element is 10

The second element is 20

20.5.2.3.Функция vector::back()

Возвращает ссылку на последний элемент вектора.

reference back( );

const_reference back( ) const;

Возвращаемое значение

Последний элемент вектора. Если вектор пустой, то возвращаемое значение не определено.

Замечания

Если возвращаемое значение присваивается константной ссылке, то вектор не может быть модифицирован, а в противном случае – может.

Пример

#include <vector>

#include <iostream>

int main( )

{

using namespace std;

vector <int> v1;

v1.push_back( 10 );

v1.push_back( 11 );

int& i = v1.back( );

const int& ii = v1.front( );

cout << "The last integer of v1 is " << i << endl;

i--;

cout << "The next-to-last integer of v1 is "<< ii << endl;

}

Вывод программы

The last integer of v1 is 11

The next-to-last integer of v1 is 10

20.5.2.4.Функция vector::begin()

Возвращает итератор произвольного доступа, указывающий на первый элемент вектора

const_iterator begin() const;

iterator begin();

Возвращаемое значение

Итератор, указывающий на первый элемент вектора. Если вектор пустой, то он указывает на позицию, следующую за пустым вектором.

Замечания

Если возвращаемое значение присваивается константной ссылке, то вектор не может быть модифицирован, а в противном случае – может.

Пример

#include <vector>

#include <iostream>

int main( )

{

using namespace std;

vector <int> c1;

vector <int>::iterator c1_Iter;

vector <int>::const_iterator c1_cIter;

c1.push_back( 1 );

c1.push_back( 2 );

c1_Iter = c1.begin( );

cout << "Первый элемент c1 равен "<< *c1_Iter << endl;

*c1_Iter = 20;

c1_Iter = c1.begin( );

cout << " Теперь первый элемент c1 равен "<< *c1_Iter << endl;

// Следующая строка ошибочна, поскольку итератор константный

// *c1_cIter = 200;

}

Вывод программы

Первый элемент c1 равен 1

Теперь первый элемент c1 равен 20

20.5.2.5.Функция vector:: capacity()

Возвращает число элементов, которые вектор может содержать без распределения дополнительной памяти. В то время как size() возвращает текущее число элементов, capacity() возвращает зарезервированное.

size_type capacity( ) const;

Возвращаемое значение

Текущее число элементов вектора.

Замечания

Функции resize() и reserve() можно использовать для резервирования памяти для вектора.

Пример

#include <vector>

#include <iostream>

int main( )

{

using namespace std;

vector <int> v1;

v1.push_back( 1 );

v1.push_back( 2 );

cout << "The length of storage allocated is "

<< v1.capacity( ) << "." << endl;

v1.reserve(5);

cout << "The length of storage allocated is now "

<< v1.capacity( ) << "." << endl;

}

Вывод программы

The length of storage allocated is 2.

The length of storage allocated is now 5.

20.5.2.6.Функция vector::clear()

Удаляет элементы вектора.

void clear( );

Пример

#include <vector>

#include <iostream>

int main( )

{

using namespace std;

vector <int> v1;

v1.push_back( 10 );

v1.push_back( 20 );

v1.push_back( 30 );

cout << "The size of v1 is " << v1.size( ) << endl;

v1.clear( );

cout << "The size of v1 after clearing is " << v1.size( ) << endl;

}

Вывод программы

The size of v1 is 3

The size of v1 after clearing is 0

20.5.2.7.Функция vector:: empty()

Возвращает TRUE, если вектор пустой.

bool empty( ) const;

Пример

#include <vector>

#include <iostream>

int main( )

{

using namespace std;

vector <int> v1;

v1.push_back( 10 );

if ( v1.empty( ) ) cout << "The vector is empty." << endl;

else cout << "The vector is not empty." << endl;

}

Вывод программы

The vector is not empty.

20.5.2.8.Функция vector::end()

Возвращает итератор произвольного доступа, указывающий на элемент вектора, следующий за последним.

iterator end( );

const_iterator end( ) const;

Замечания

Если возвращаемое значение присваивается переменной типа const_iterator, то вектор не может быть модифицирован, а если переменной типа iterator – может.

Пример

#include <vector>

#include <iostream>

int main( )

{

using namespace std;

vector <int> v1;

vector <int>::iterator v1_Iter;

v1.push_back( 1 );

v1.push_back( 2 );

for ( v1_Iter = v1.begin( ) ; v1_Iter != v1.end( ) ; v1_Iter++ )

cout << *v1_Iter << endl;

}

Вывод программы

1

2

20.5.2.9.Функция vector::erase()

Удаляет один или несколько элементов вектора, начиная с указанной позиции.

iterator erase(iterator _Where);

iterator erase( iterator _First, iterator _Last );

Параметр

_Where

Позиция элемента вектора, который должен быть удален.

_First

Позиция первого элемента вектора, который должен быть удален.

_Last

Позиция сразу за последним элементом вектора, который должен быть удален.

Возвращаемое значение

Итератор, указывающий на первый элемент массива за последним удаленным или указатель на конец вектора, если он пуст.

Пример

#include <vector>

#include <iostream>

int main( )

{

using namespace std;

vector <int> v1;

vector <int>::iterator Iter;

v1.push_back( 10 );

v1.push_back( 20 );

v1.push_back( 30 );

v1.push_back( 40 );

v1.push_back( 50 );

cout << "v1 =" ;

for ( Iter = v1.begin( ) ; Iter != v1.end( ) ; Iter++ ) cout << " " << *Iter;

cout << endl;

v1.erase( v1.begin( ) );

cout << "v1 =";

for ( Iter = v1.begin( ) ; Iter != v1.end( ) ; Iter++ ) cout << " " << *Iter;

cout << endl;

v1.erase( v1.begin( ) + 1, v1.begin( ) + 3 );

cout << "v1 =";

for ( Iter = v1.begin( ) ; Iter != v1.end( ) ; Iter++ ) cout << " " << *Iter;

cout << endl;

}

Вывод программы

v1 = 10 20 30 40 50

v1 = 20 30 40 50

v1 = 20 50

20.5.2.10.Функция vector::front()

Возвращает ссылку на первый элемент вектора

reference front( );

const_reference front( ) const;

Возвращаемое значение

Ссылка на первый элемент вектора. Если вектор пустой, то значение не определено.

Замечания

Если возвращаемое значение присваивается константной ссылке, то вектор не может быть модифицирован, а в противном случае – может.

Пример

#include <vector>

#include <iostream>

int main( )

{

using namespace std;

vector <int> v1;

v1.push_back( 10 );

v1.push_back( 11 );

int& i = v1.front( );

const int& ii = v1.front( );

cout << "The first integer of v1 is "<< i << endl;

i++;

cout << "The second integer of v1 is "<< ii << endl;

}

Вывод программы

The first integer of v1 is 10

The second integer of v1 is 11

20.5.2.11.Функция vector:: get_allocator()

Возвращает копию объекта, который используется классом вектор для распределения памяти.

Allocator get_allocator( ) const;

Возвращаемое значение

Распределитель памяти, используемый вектором.

Замечания

Распределитель памяти по умолчанию применим для решения большинства задач, но вместе с тем Вы можете разработать и использовать свой собственный распределитель памяти.

Пример

#include <vector>

#include <iostream>

int main( )

{

using namespace std;

// В следующих строках объявляются объекты, которые использует распределитель

// памяти по умолчанию

vector<int> v1;

vector<int, allocator<int> > v2 = vector<int, allocator<int> >(allocator<int>( ));

// v3 будет использовать тот же распределитель, что и v1

vector <int> v3( v1.get_allocator( ) );

vector<int>::allocator_type xvec = v3.get_allocator( );

// Здесь можно вызывать функции распределителя памяти

}

20.5.2.12.Функция vector:: insert()

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

iterator insert( iterator _Where, const Type& _Val );

void insert( iterator _Where, size_type _Count, const Type& _Val );

template<class InputIterator>

void insert(iterator _Where,InputIterator _First,InputIterator _Last);

Параметр

_Where

Позиция вектора, куда вставляется первый элемент

_Val

Значение элемента, который вставляется в вектор

_Count

Количество вставляемых элементов

_First

Позиция первого элемента диапазона копируемых элементов

_Last

Позиция первого элемента, следующего за границей диапазона копируемых элементов

Возвращаемое значение

Итератор, указывающий на позицию, куда новый элемент был вставлен

Замечания

Любая операция вставки может быть дорогостоящей

Пример

#include <vector>

#include <iostream>

int main( )

{

using namespace std;

vector <int> v1;

vector <int>::iterator Iter;

v1.push_back( 10 );

v1.push_back( 20 );

v1.push_back( 30 );

cout << "v1 =" ;

for ( Iter = v1.begin( ) ; Iter != v1.end( ) ; Iter++ ) cout << " " << *Iter;

cout << endl;

v1.insert( v1.begin( ) + 1, 40 );

cout << "v1 =";

for ( Iter = v1.begin( ) ; Iter != v1.end( ) ; Iter++ ) cout << " " << *Iter;

cout << endl;

v1.insert( v1.begin( ) + 2, 4, 50 );

cout << "v1 =";

for ( Iter = v1.begin( ) ; Iter != v1.end( ) ; Iter++ ) cout << " " << *Iter;

cout << endl;

v1.insert( v1.begin( )+1, v1.begin( )+2, v1.begin( )+4 );

cout << "v1 =";

for (Iter = v1.begin( ); Iter != v1.end( ); Iter++ ) cout << " " << *Iter;

cout << endl;

}

Вывод программы

v1 = 10 20 30

v1 = 10 40 20 30

v1 = 10 40 50 50 50 50 20 30

v1 = 10 50 50 40 50 50 50 50 20 30

20.5.2.13.Функция vector::max_size()

Возвращает максимально возможное число элементов вектора

size_type max_size( ) const;

Пример

#include <vector>

#include <iostream>

int main( )

{

using namespace std;

vector <int> v1;

vector <int>::size_type i;

i = v1.max_size( );

cout << "The maximum possible length of the vector is " << i << "." << endl;

}

Вывод программы

The maximum possible length of the vector is 1073741823.

20.5.2.14.Функция vector::pop_back()

Удаляет последний элемент вектора, который не должен быть пустым

void pop_back( );

Пример

#include <vector>

#include <iostream>

int main( )

{

using namespace std;

vector <int> v1;

v1.push_back( 1 );

cout << v1.back( ) << endl;

v1.push_back( 2 );

cout << v1.back( ) << endl;

v1.pop_back( );

cout << v1.back( ) << endl;

}

Вывод программы

1

2

1

20.5.2.15.Функция vector::push_back()

Добавляет элемент в конец вектора

void push_back(const Type& _Val );

Параметр

_Val

Значение вставляемого элемента вектора.

Пример

#include <vector>

#include <iostream>

int main( )

{

using namespace std;

vector <int> v1;

v1.push_back( 1 );

if ( v1.size( ) != 0 ) cout << "Last element: " << v1.back( ) << endl;

v1.push_back( 2 );

if ( v1.size( ) != 0 ) cout << "New last element: " << v1.back( ) << endl;

}

Вывод программы

Last element: 1

New last element: 2

20.5.2.16.Функция vector::rbegin()

Возвращает итератор произвольного доступа, указывающий на первый элемент реверсированного вектора

reverse_iterator rbegin( );

const_reverse_iterator rbegin( ) const;

Замечания

Если возвращаемое значение присваивается константному итератору, то вектор не может быть модифицирован, а в противном случае – может.

Пример

#include <vector>

#include <iostream>

int main( )

{

using namespace std;

vector <int> v1;

vector <int>::iterator v1_Iter;

vector <int>::reverse_iterator v1_rIter;

v1.push_back( 1 );

v1.push_back( 2 );

v1_Iter = v1.begin( );

cout << "The first element of vector is "<< *v1_Iter << "." << endl;

v1_rIter = v1.rbegin( );

cout << "The first element of the reversed vector is "<< *v1_rIter << "." << endl;

}

Вывод программы

The first element of vector is 1.

The first element of the reversed vector is 2.

20.5.2.17.Функция vector::rend ()

Возвращает итератор произвольного доступа, указывающий на элемент, следующий за последним элементом реверсированного вектора.

const_reverse_iterator rend( ) const;

reverse_iterator rend( );

Замечания

Функция rend() применяется к реверсированному вектору так же, как end() к обычному вектору. Если возвращаемое значение присваивается константной ссылке, то вектор не может быть модифицирован, а в противном случае – может. Эта функция может использоваться для проверки того, достиг ли реверсированный итератор конца вектора. Значение, возвращаемое rend(), не должно разыменовывааться.

Пример

#include <vector>

#include <iostream>

int main( )

{

using namespace std;

vector <int> v1;

vector <int>::reverse_iterator v1_rIter;

v1.push_back( 1 );

v1.push_back( 2 );

for ( v1_rIter = v1.rbegin( ) ; v1_rIter != v1.rend( ) ; v1_rIter++ )

cout << *v1_rIter << endl;

}

Вывод программы

2

1

20.5.2.18.Функция vector::reserve()

Резервирует минимальную длину вектора и, при необходимости, перераспределяет память для вектора.

void reserve(size_type _Count );

Параметр

_Count

Минимальная длина вектора.

Пример

#include <vector>

#include <iostream>

int main( )

{

using namespace std;

vector <int> v1;

//vector <int>::iterator Iter;

v1.push_back( 1 );

cout << "Current capacity of v1 = "<< v1.capacity( ) << endl;

v1.reserve( 20 );

cout << "Current capacity of v1 = "<< v1.capacity( ) << endl;

}

Вывод программы

Current capacity of v1 = 1

Current capacity of v1 = 20

20.5.2.19.Функция vector::resize()

Устанавливает новую длину вектора.

void resize( size_type _Newsize);

void resize( size_type _Newsize, Type _Val);

Параметр

_Newsize

Новая длина вектора.

_Val

Значение, которое присваивается добавляемым элементом вектора.

Замечания

Если размер контейнера меньше чем запрашиваемый размер _Newsize, то элементы будут добавляться до тех пор, пока не будет достигнут заданный размер. Если текущий размер вектора тот же, что и _Newsize, никаких действий не выполняется. Функция size() возвращает текущий размер вектора.

Пример

#include <vector>

#include <iostream>

int main( )

{

using namespace std;

vector <int> v1;

v1.push_back( 10 );

v1.push_back( 20 );

v1.push_back( 30 );

v1.resize( 4,40 );

cout << "The size of v1 is " << v1.size( ) << endl;

cout << "The value of the last object is " << v1.back( ) << endl;

v1.resize( 5 );

cout << "The size of v1 is now " << v1.size( ) << endl;

cout << "The value of the last object is now " << v1.back( ) << endl;

}

Вывод программы

The size of v1 is 4

The value of the last object is 40

The size of v1 is now 5

The value of the last object is now 0

20.5.2.20.Функция vector::size()

Возвращает число элементов вектора

size_type size( ) const;

Пример

#include <vector>

#include <iostream>

int main( )

{

using namespace std;

vector <int> v1;

vector <int>::size_type i;

v1.push_back( 1 );

i = v1.size( );

cout << "Vector length is " << i << "." << endl;

v1.push_back( 2 );

i = v1.size( );

cout << "Vector length is now " << i << "." << endl;

}

Вывод программы

Vector length is 1.

Vector length is now 2.

20.5.2.21.Функция vector::swap()

Меняет местами значения двух векторов.

void swap( vector& _Right );

friend void swap(vector<Type, Allocator >& _Left,

vector<Type, Allocator >& _Right);

Параметр

_Right, _Left

Векторы, элементы которых свопируются

Пример

#include <vector>

#include <iostream>

int main( )

{

using namespace std;

vector <int> v1, v2;

v1.push_back( 1 );

v1.push_back( 2 );

v1.push_back( 3 );

v2.push_back( 10 );

v2.push_back( 20 );

cout << "The number of elements in v1 = " << v1.size( ) << endl;

cout << "The number of elements in v2 = " << v2.size( ) << endl;

cout << endl;

v1.swap( v2 );

cout << "The number of elements in v1 = " << v1.size( ) << endl;

cout << "The number of elements in v2 = " << v2.size( ) << endl;

}

Вывод программы

The number of elements in v1 = 3

The number of elements in v2 = 2

The number of elements in v1 = 2

The number of elements in v2 = 3

20.5.3.Перегруженные операции класса vector

20.5.3.1.Операция []

Возвращает ссылку на элемент в указанной позиции.

reference operator[]( size_type _Pos );

const_reference operator[](size_type _Pos) const;

Параметр

_Pos

Позиция (индекс) элемента вектора

Замечания

Если возвращаемое значение присваивается константной ссылке, то вектор не может быть модифицирован, а в противном случае – может. Если _Pos>=Size(), то возвращаемое значение не определено.

Пример

#include <vector>

#include <iostream>

int main( )

{

using namespace std;

vector <int> v1;

v1.push_back( 10 );

v1.push_back( 20 );

int& i = v1[1];

cout << "The second integer of v1 is " << i << endl;

}

Вывод программы

The second integer of v1 is 20

20.5.3.2.Операции сравнения

Следующие перегруженные операции выполняют сравнение содержимого двух векторов. Сравнение элементов выполняется аналогично тому, как сравниваются строки символов. Это значит, что элементы массивов сравниваются попарно до тех пор, пока не встретятся отличающиеся элементы, результат сравнения которых и определяет результат операции в целом.

template<class T, class A>

bool operator==(operator

const vector<T, A>& lhs,

const vector<T, A>& rhs);

template<class T, class A>

bool operator!=(

const vector<T, A>& lhs,

const vector<T, A>& rhs);

template<class T, class A>

bool operator< (

const vector<T, A>& lhs,

const vector<T, A>& rhs);

template<class T, class A>

bool operator> (

const vector<T, A>& lhs,

const vector<T, A>& rhs);

template<class T, class A>

bool operator<=(

const vector<T, A>& lhs,

const vector<T, A>& rhs);

template<class T, class A>

bool operator>=(

const vector<T, A>& lhs,

const vector<T, A>& rhs);

Пример

typedef vector <int> intVec;

void PrintRes(intVec &v1,intVec &v2)

{ int i;

cout<<" v1=";

for(i=0;i<v1.size();i++) cout<<' '<<v1[i];

cout<<endl;

cout<<" v2=";

for(i=0;i<v2.size();i++) cout<<' '<<v2[i];

cout<<endl;

if(v1==v2) cout<<"v1==v2"; else

if(v1>v2) cout<<"v1>v2"; else

if (v1<v2) cout<<"v1<v2"; else

if(v1>=v2) cout<<"v1>=v2"; else

if(v1<=v2) cout<<"v1<=v2";

cout<<endl;

}

int main()

{

intVec v1,v2;

v1.push_back(10); v1.push_back(20);

v2.push_back(10); v2.push_back(20);

PrintRes(v1,v2);

v2[1]=22;

PrintRes(v1,v2);

v2[1]=2;

PrintRes(v1,v2);

v1.push_back(30); v2.push_back(40);

PrintRes(v1,v2);

v1.pop_back();

PrintRes(v1,v2);

}

Вывод программы

v1= 10 20

v2= 10 20

v1==v2

v1= 10 20

v2= 10 22

v1<v2

v1= 10 20

v2= 10 2

v1>v2

v1= 10 20 30

v2= 10 2 40

v1>v2

v1= 10 20

v2= 10 2 40

v1>v2

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]