vector容器類型
vector容器是一個模板類,可以存放任何類型的對象(但必須是同一類對象)。vector對象可以在運行時高效地添加元素,並且vector中元素師連續存儲的。
構造方法:
vector<T> v1; //保存對象類型爲T。默認構造函數,v1爲空
vector<T> v2(v1); //v2是v1的一個副本
vector<T> v3(n, 1); //v3包含n個值爲i的元素
vector<T> v4(n); //使用T類型的默認構造函數初始化的n個元素副本
舉例:
vector<string> v1; // 創建空容器,其對象類型爲string類
vector<string> v2(10); // 創建有10個具有初始值(即空串)的string類對象的容器
vector<string> v3(5, "hello"); // 創建有5個值爲"hello"的string類對象的容器
vector<string> v4(v3.begin(), v3.end()); // v4是與v3相同的容器(完全複製)
程序:
#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
using namespace std;
int main ()
{
string str[]={"Alex","John","Robert"};
// empty vector object
vector<int> v1;
// creates vector with 10 empty elements
vector<int> v2(10);
// creates vector with 10 elements,
// and assign value 0 for each
vector<int> v3(10,0);
// creates vector and assigns
// values from string array
vector<string> v4(str+0,str+3);
//將str從str+0到str+3的元素複製到v4中
vector<string>::iterator sIt = v4.begin();
while ( sIt != v4.end() )
cout << *sIt++ << " ";
cout << endl;
// copy constructor
vector<string> v5(v4);
for ( int i=0; i<3; i++ )
cout << v5[i] << " ";
cout << endl;
return 0;
}
OUTPUT:
// Alex John Robert
// Alex John Robert
bool empty() const; // 如果爲容器爲空,返回true;否則返回false
size_type max_size() const; // 返回容器能容納的最大元素個數
size_type size() const; // 返回容器中元素個數
size_type capacity() const; // 容器能夠存儲的元素個數,有:capacity() >= size()
void reserve(size_type n); // 確保capacity() >= n
void resize(size_type n, T x = T()); // 確保返回後,有:size() == n;如果之前size()<n,那麼用元素x的值補全。
const_reference front() const;
reference back(); // 返回容器中最後一個元素的引用(容器必須非空)
const_reference back() const;
const_reference operator[](size_type pos) const;
reference at(size_type pos); // 返回下標爲pos的元素的引用;如果下標不正確,則拋出異常out_of_range
const_reference at(size_type pos) const;
void push_back(const T& x); // 向容器末尾添加一個元素
void pop_back(); // 彈出容器中最後一個元素(容器必須非空)
iterator insert(iterator it, const T& x = T()); // 在插入點元素之前插入元素(或者說在插入點插入元素)
void insert(iterator it, size_type n, const T& x); // 注意迭代器可能不再有效(可能重新分配空間)
void insert(iterator it, const_iterator first, const_iterator last);
iterator erase(iterator first, iterator last); // 注意:刪除元素後,刪除點之後的元素對應的迭代器不再有效。
void assign(const_iterator first, const_iterator last);
iterator begin();
const_iterator end() const;
iterator end();
reverse_iterator rbegin();
const_reverse_iterator rend() const;
reverse_iterator rend();
注:其實只需要實現operator==和operator!=就可以了,其它可以根據這兩個實現。因爲,operator!= (lhs, rhs) 就是 !(lhs == rhs),operator<=(lhs, rhs) 就是 !(rhs < lhs),operator>(lhs, rhs) 就是 (rhs < lhs),operator>=(lhs, rhs) 就是 !(lhs, rhs)。
vector類的迭代器除了支持通用的前綴自增運算符外,還支持算術運算:it + n、it - n、it2 - it1。注意it2 - it1返回值爲difference_type(signed類型)。