STL之vector

来源:互联网 发布:wps office mac版下载 编辑:程序博客网 时间:2024/06/07 19:28

前言

vector类支持动态数据形式,和deque也有些类似。当需要操作类似数组功能时,vector是非常有效的。

头文件:

#include <vector>

vector基础

构造函数

vector模板定义

template

vector重载

vector重载了分配操作符,还定义了如下的比较操作符:

==,<,<=,>,>=,!=

vector支持随机访问迭代器,并重载了[]符号,意味着vector对象能像数组一样通过索引访问。

vector具体类型

size_type整数类型difference_type能够区分两个地址不同的整数类型reference元素的引用(T&)const_reference元素的常量引用(const T&)iterator迭代器const_iteratorconst迭代器reverse_iterator反向迭代器const_reverse_iteratorconst反向迭代器value_type存储在容器中值的类型(T)allocator_type分配器类型pointer指向元素的指针const_pointer指向元素的常量指针(const T*)

vector成员函数

template void assign(InIter start, InIter end)将由start和end指定的序列赋值给vectorvoid assign(size_type num,const T &val)将num个值为val的元素赋值给vectorreference at(size_type i);
const_reference at(size_type i) const返回指向元素i的引用。如果i索引越界,抛出out_of_range异常reference back();
const_reference back() const返回vector中最后一个元素的引用iterator begin();
const_iterator begin() const返回vector中第一个元素的迭代器size_type capacity() const返回vector当前容量。即在vector需要分配更多内存之前,当前vector所能保存元素的最大容量void clear()删除vector中所有元素bool empty() const如果调用的vector为空,返回true;否则返回falseiterator end();
const_iterator end() const返回指向vector尾部的迭代器iterator erase(iterator i)删除指向i的元素。返回迭代器指向被删除元素的下一个元素iterator erase(iterator start,iterator end)删除start和end之间元素。返回迭代器指向最后一个被删除元素的下一个元素reference front();
const_reference front() const返回vector中第一个元素的引用allocator_type get_allocator() const返回vector的分配器iterator insert(iterator i,const T &val)在元素i之前插入val。iterator insert(iterator i,size_type num,cosnt T &val)在元素i之前插入num个值val的元素template void insert(iterator i,InIter start,InIter end)在元素i之前插入由start和end定义的序列size_type max_size() const返回vector能保存的最大元素个数reference operator[](size_type i);
const_reference operator[](size_type i) const返回由i指定的元素引用void pop_back()删除vector中最后一个元素void push_back(const T &val)向vector尾部增加一个值为val的元素reverse_iterator rbegin();
const_reverse_iterator rbegin() const返回一个反向迭代器,迭代器起始位置指向vector结束位置reverse_iterator rend();
const_reverse_iterator rend() const返回一个反向迭代器,迭代器起始位置指向vector起始位置void reverse(size_type num)设置vector容量大小至少为numvoid resize(size_type num,T val=T())改变vector的大小为num。如果vector要扩容,则扩容元素值设为valsize_type size() const返回当前vector中元素个数void swap(vector

Code Example

1.构造函数

//三种构造函数//空构造函数vector<int> v1;//第二种构造函数vector<char> v2(8,'A');//第四种构造函数vector<char>::iterator p1 = v2.begin() + 2;vector<char>::iterator p2 = v2.end() - 2;vector<char> v3(p1,p2);int i=0;cout<<"v1.size() = "<<v1.size()<<" ; v2.size() = "<<v2.size()<<" ; v3.size() = "<<v3.size()<<"\n\n";cout<<"v1 : ";for (i=0;i<v1.size();i++){    cout<<v1.at(i);}cout<<"\n\n";cout<<"v2 : ";for (i=0;i<v2.size();i++){    cout<<v2.at(i);}cout<<"\n\n";cout<<"v2 : ";for (i=0;i<v3.size();i++){    cout<<v3.at(i);}cout<<"\n\n";

2.成员函数

vector<char> v1,v2;int i = 0;for (i=0;i<10;i++){    v1.push_back(i+'A');}cout<<"contents of v1 : \n";for (i=0;i<v1.size();i++){    cout<<v1.at(i)<<" ";    //at方法}cout<<"\n\n";//begin和end方法vector<char>::iterator p1 = v1.begin() + 1;vector<char>::iterator p2 = v1.end() - 4;//assign方法//方法一v2.assign(p1,p2);cout<<"first way:\n";for (i=0;i<v2.size();i++){    cout<<v2[i]<<" ";}cout<<"\n\n";//方法二v2.assign(2,'X');cout<<"second way:\n";for (i=0;i<v2.size();i++){    cout<<v2[i]<<" ";}cout<<"\n\n";cout<<"back() = "<<v1.back()<<"\n\n";//begin和end方法cout<<"begin(): \n";p1 = v1.begin();while (p1!=v1.end()){    cout<<*p1<<" ";    p1++;}cout<<"\n\n";cout<<"end(): \n";p2 = v1.end();while (p2!=v1.begin()){    p2--;    cout<<*p2<<" ";}cout<<"\n\n";//capacity()方法cout<<"capacity() = "<<v1.capacity()<<"\n\n";//clear方法,size方法v2.clear();cout<<"v2 size = "<<v2.size()<<" ; capacity() = "<<v2.capacity()<<"\n\n";//empty方法cout<<"v1.empty() = "<<v1.empty()<<" ; v2.empty() = "<<v2.empty()<<"\n\n";//front()方法cout<<"front() = "<<v1.front()<<"\n\n";//insert方法:三种insert方法cout<<"insert(): \n";p1 = v1.begin() + 3;//v1.insert(p1,'X');//v1.insert(p1,4,'X');v2.assign(4,'Y');v1.insert(p1,v2.begin(),v2.end());for (i=0;i<v1.size();i++){    cout<<v1.at(i)<<" ";}cout<<"\n\n";//pop_back方法cout<<"pop_back(): \n";v2.pop_back();for (i=0;i<v2.size();i++){    cout<<v2.at(i)<<" ";}cout<<"\n\n";//push_back方法cout<<"push_back(): \n";v2.push_back('T');for (i=0;i<v2.size();i++){    cout<<v2.at(i)<<" ";}cout<<"\n\n";//reverse_iterator方法cout<<"reverse_iterator: \n";vector<char>::reverse_iterator ri = v1.rbegin();while (ri!=v1.rend()){    cout<<*ri<<" ";    ri++;}cout<<"\n\n";ri = v1.rend();while (ri!=v1.rbegin()){    ri--;    cout<<*ri<<" "; }cout<<"\n\n";//resize方法v2.resize(10,'Z');for (i=0;i<v2.size();i++){    cout<<v2.at(i)<<" ";}cout<<"\n\n";//swap方法v1.swap(v2);for (i=0;i<v1.size();i++){    cout<<v1.at(i)<<" ";}cout<<"\n\n";for (i=0;i<v2.size();i++){    cout<<v2.at(i)<<" ";}cout<<"\n\n";
0 0