1. 程式人生 > >C++ vector類講解

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

提供一個可以訪問vectorconst元素的隨機儲存迭代器

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;

方法介紹:返回相反vectorvector中的元素反過來)中第一個元素的迭代器

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;