C++ vector類講解
今天在做一個學生類的管理系統時,由於沒有用到資料庫,這就需要一個可以容納學生的容器。在網上找了一段時間,發現c++中的vector類可以較好的滿足這樣的要求,下面就簡單的講解一下c++中的vector類的相關用法(詳情請看msdn)。
模板vector類是一個根據給予的資料型別按照線性佈局排列元素的序列容器。當我們需要高效隨機存取資料元素的時候,這個類比較好用。
template <
class Type,
class Allocator = allocator<Type>
>
class vector
引數:Type:儲存到vector中的資料型別。
Allocator:型別表示的儲存分配物件封裝了vector底層對記憶體的分配與回收細節。這個引數是可選的,一般預設的值是allocator<Type>.
列:vector<int> intvector;
簡介:
Vector向量允許在序列的末端插入或刪除資料元素。在vector向量的中間插入或刪除元素要求線性時間。如果要在序列開始和結尾之間插入或刪除資料用deque(雙列隊)
class容器效果會更好,而要在序列任意位置上插入或刪除元素用List class容器更好。當成員方法新增的資料元素大於vector當前物件的儲存容量時,vector向量的記憶體將會重新分配。另外插入或消除元素可能會改變序列內部的儲存地址。在所有這些情況下,迭代器或者引用的序列改變部分會變得無效。如果沒有發生重新分配,那麼只有在插入刪除點之前的元素是有效的。
Vector向量:
建構函式
構造一個有特殊大小或者特殊值或者複製其他vector全部或部分資料的vector。
vector( );
explicit vector(
const Allocator& _Al
);
explicit vector(
size_type _Count
);
vector(
size_type _Count,
const Type& _Val
);
vector(
size_type _Count,
const Type& _Val,
const Allocator& _Al
);
vector(
const vector& _Right
);
template<class InputIterator>
vector(
InputIterator _First,
InputIterator _Last
);
template<class InputIterator>
vector(
InputIterator _First,
InputIterator _Last,
const Allocator& _Al
);
vector(
vector&& _Right
);
例項:
// vector_ctor.cpp
// compile with: /EHsc
#include <vector>
#include <iostream>
int main( )
{
using namespace std;
vector <int>::iterator v1_Iter, v2_Iter, v3_Iter, v4_Iter, v5_Iter, v6_Iter;
// Create an empty vector v0
vector <int> v0;
// Create a vector v1 with 3 elements of default value 0
vector <int> v1( 3 );
// Create a vector v2 with 5 elements of value 2
vector <int> v2( 5, 2);
// 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( ) );
// Create a copy, vector v4, of vector v2
vector <int> v4( v2 );
// Create a new temporary vector for demonstrating copying ranges
vector <int> v5( 5 );
for ( int index = 0; index < 5; index++ )
v5[index] = index;
// Create a vector v6 by copying the range v5[_First, _Last)
vector <int> v6( v5.begin( ) + 1, v5.begin( ) + 3 );
// Move vector v2 to vector v7
vector <int> v7( move(v2) );
vector <int>::iterator v7_Iter;
型別定義
Allocator_type |
|
Const_iterator |
提供一個可以讀取vector元素的隨機儲存迭代器 |
Const_pointer |
提供一個指向vector const元素的指標 |
Const_reference |
提供一個vector儲存的const元素的引用,用來執行const操作 |
Const_reverse_iterator |
提供一個可以訪問vector中const元素的隨機儲存迭代器 |
Difference_type |
提供兩個元素地址之間的差異型別 |
iterator |
提供一個可以讀取和修改元素的迭代器 |
ponter |
提供一個指向vector一個元素的指標 |
reference |
提供一個儲存在vector中的元素的引用 |
Reverse_iterator |
提供一個可以讀取和修改反向vector元素的迭代器 |
Size_type |
基數vector元素的個數 |
Value_type |
代表儲存在vector中的資料型別 |
成員方法
1.
void assign(
size_type _Count, //元素個數
const Type& _Val //元素值
);
template<class InputIterator>
void assign(
InputIterator _First, //拷貝在元素範圍中的第一個元素的位置
InputIterator _Last //拷貝在元素範圍中的最有一個元素的位置
);
方法介紹:清除vector中的元素並且拷貝其他vector中的元素到一個空的vector
2.
reference at(
size_type _Pos //vector中指定的元素位置
);
const_reference at(
size_type _Pos
) const;
方法介紹:返回vector中指定位置的元素的引用
3.
reference back( );
const_reference back( ) const;
方法介紹:返回vector中最後一個元素的引用
4.
const_iterator begin() const;
iterator begin();
方法介紹:返回vector中第一個元素的迭代器
5.
size_type capacity( ) const;
方法介紹:返回vector中可以容納的元素個數。
6.
const_iterator cbegin() const;
方法介紹:返回vector中第一個元素的迭代器
7.
const_iterator cend( ) const;
方法介紹:返回vector中最後的一個迭代器,如果是空的vector,那麼vector::cend()==vector::cbegin().
8.
const_reverse_iterator crbegin( ) const;
方法介紹:返回相反vector(vector中的元素反過來)中第一個元素的迭代器
9.
const_reverse_iterator crend( ) const;
方法介紹:返回標示vector中最後元素的迭代器
10.
iterator insert(
const_iterator _Where,
const Type& _Val
);
iterator insert(
const_iterator _Where,
Type&& _Val
);
void insert(
const_iterator _Where,
size_type _Count,
const Type& _Val
);
template<class InputIterator>
void insert(
const_iterator _Where,
InputIterator _First,
InputIterator _Last
);
方法介紹:在vector中的特殊位置插入一個元素或者一個範圍。
11.
size_type max_size( ) const;
方法介紹:返回vector向量的最大長度
12.
void pop_back( );
方法介紹:刪除vector中的末尾的元素
13.
void push_back(
const Type&_Val
);
void push_back(
Type&&_Val
);
方法介紹:在vector末尾出入一個元素
14.
size_type size( ) const;
方法介紹:返回當前vector中的元素個數
15.
void swap(
vector<Type, Allocator>& _Right
);
friend void swap(
vector<Type, Allocator >& _Left,
vector<Type, Allocator >& _Right
);
方法介紹:交換兩個vector中的元素
運算子過載
1.
reference operator[](
size_type _Pos
);
const_reference operator[](
size_type_Pos
) const;
過載介紹:返回vector中特別元素的引用
2.
vector& operator=(
const vector& _Right
);
vector& operator=(
vector&& _Right
);
過載介紹:拷貝其他vector,並且置換當前vector中的元素
使用要求
1新增標頭檔案:#include<vector>
2使用名稱空間:using namespace std;