黎明的剔透里伸出了你沁清的暧昧

Graphics|EngineDev|GameDev|2D&3D Art

  C++博客 :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  60 随笔 :: 1 文章 :: 18 评论 :: 0 Trackbacks
vector应用基础:
头文件:#include<vector>
常用的public类型为iterator、const_iterator、reverse_iterator和const_reverse_iterator迭代器类型,可以直接通过vector<T>::iterator等方式使用

创建vector对象
:以下四个vector构造函数均可创建一个vector对象
(1)vector(const A&a=A())
例如:vector<int> v;

(2)vector(size_type n)

vector<double> v(10);

(3)vector(size_type n,const T&value)

vector<double> v(10,9.3)

(4)vector(const vector&)

vector<char> v1(5,'k');
vector<char> v2(v1);

(5)vector(const inputiterator first,const inputiterator last,const A&a=A())

int arry[]={1,2,3,4,5,6};
vector<int> v(arry,arry+5);

初始化赋值:
vector提供的push_back函数,常用来进行初始化容器,push_back在容器的尾端插入新的元素value

 1 #include <iostream>
 2 #include <vector>
 3 using namespace std;
 4 int main(){
 5     vector<int> v;
 6     v.push_back(20);
 7     v.push_back(10);
 8     v.push_back (5);
 9 for(int i=0;i<v.size();i++)
10         cout<<"a["<<i<<"]="<<v[i]<<endl;
11     return 0;
12 }

元素的遍历:
迭代器方式的访问时使用vector容器提供的iterator类型,定义一个迭代器变量,例如vector<int>::iterator i; 然后对迭代器进行++操作,将迭代器从一个元素移动到下一个元素位置,从而通过迭代器的*操作,将所有元素读取出来
vector提供了begin()和end()函,用于获取首元素的迭代器和最后一个元素的下一个位置的迭代器。
iterator begin();
iterator end();
 1 #include <iostream>
 2 #include <vector>
 3 using namespace std;
 4 int main(){
 5     vector<int> v;
 6     v.push_back(20);
 7     v.push_back(10);
 8     v.push_back (5);  
 9     vector<int>::iterator i,iend;//起始和末尾迭代器
10     iend=v.end();
11     int j;
12     for(i=v.begin(),j=0;i!=iend;i++,j++){
13        cout<<"v["<<j<<"]="<<*i<<endl;//*i为迭代器方式的访问
14     }
15     return 0;
16 }



元素的插入:
不同于在vector容器尾插部添加元素的push_back 函数,insert函数可在任意位置插入元素,由于插入时要先将插入位置后的元素后移,以空出一个位置进行插入,因此insert比push_back函数耗时。
iterator insert(iterator pos, const T&X);

元素的删除:
vector容器提供了一个erase函数,用来删除迭代器pos所指的元素或者迭代器[first,last)的所有元素,原型如下:
(1)iterator erase(iterator pos);
(2)iterator erase(iterator first,iterator last);
另外一个删除元素的函数是void clear(),它调用erase函数,将[begin(),end())区间的所有vector元素全部清除。
 1 #include <iostream>
 2 #include <vector>
 3 
 4 using namespace std;
 5 
 6 class MyVector{
 7     public:
 8         MyVector(char *name,int age){
 9           this->name=name;
10           this->age=age;
11         }
12         ~MyVector(){}
13     public:
14         char *name;
15         int age;
16 };
17 
18 int main(){
19     MyVector *pDog=new MyVector("dog",1);
20     MyVector *pMonkey=new MyVector("monkey",2);
21     MyVector *pChicken=new MyVector("chicken",3);
22     MyVector *pSnake=new MyVector("snake",4);
23 
24     vector<MyVector *>v;
25     
26     v.push_back(pDog);
27     v.push_back(pMonkey);
28     v.push_back(pChicken);
29     v.push_back(pSnake);
30     
31     v.erase(v.begin()+1);
32     delete pMonkey;
33 
34     vector<MyVector*>::iterator i,iend;
35     iend=v.end();
36     for(i=v.begin();i!=iend;i++)
37         cout<<(*i)->name<<' '<<(*i)->age<<endl;
38     //清除所有vector元素
39     v.clear();
40         cout<<"执行clear()"<<endl<<"所有vector元素均已全部清除"<<endl;
41         return 0;
42 }


元素的反向遍历:
利用vector提供的反向迭代器reverse_iterator,以及相应的rbegin()和rend()函数,可反向遍历vector容器的元素,rbegin()函数返回的迭代器指向反向遍历的首元素,rend函数返回的迭代器则指向反向遍历的尾部,原型如下:
(1)reverse_iterator rbegin();
(2)reverse_iterator rend();

vector的交换:
vector利用swap算法,实现交换两个vector容器的swap 成员函数
原型:void swap(vector &,vector &);

其他常用函数:
bool empty();
判断vector是否为空 若容器没有一个元素则返回true,后则返回false;
size_type size();
当前vector容器的实际元素个数
size_type max_size();
系统所允许的vector容器的最大元素个数
size_type capacity();
当前可容纳的vector元素个数
reference back()
返回vector容器末元素,要求vector不能为空
void pop_back();
与push_back()函数相反,pop_back函数用于删除末尾的一个容器元素
posted on 2011-07-27 23:32 情绝格调(fresmaster) 阅读(712) 评论(0)  编辑 收藏 引用 所属分类: Coding

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   博问   Chat2DB   管理