vector(2)
--雨竹清风
一、元素的遍历
元素的遍历方式有两种:第一种是像数组一样遍历。
例如:
int Array[] = {1,2,3,4,5,7};
vector<int> c(Array, Array+3);
for (int i = 0; i < c.size(); i++)
{
cout<<c[i]<<" ";
}
第二种是使用迭代器it,通过*it来访问容器中的值。
vector<int>::iterator it = c.begin();
for (it; it != c.end(); it++)//end()指向的最后一个元素的下一个位置
{
cout<<*it<<" ";
}
二、容器的插入
对于插入来说要比在尾端插入费时,因为插入的位置是不固定的,需要移动元素,以空出所插入的位置来将数据插入进去。所以费时的多。
插入使用的是insert()函数。
例如:
对于上例所定义的vector可以在中间第3个位置插入一个元素14。
v.insert(v.begin() + 3, 14);
也可以在首位置插入一个元素12。
v.insert(v.begin(),12);
也可以在末尾置插入一个元素16。
v.insert(v.end(),16);
三、vector的删除
vector的删除使用的是erase()函数,它有两种形式:erase(pos);erase(first,last);
我们也可以使用clear();函数来清空vector。实际上clear()函数是调用了erase()函数。
例如:建立一个MyAnimal类,类中对构造函数进行重载。添加几个此类的对象,我们需要用vector保存的是对象的地址,所以设置vector的类型为MyAnimal*。对于删除,首先删除的是指针指向的对象,然后删除其地址。
class MyAnimal
{
public:
MyAnimal(void);
MyAnimal(char *name, int age){ this->name = name;
this->age = age;
};
~MyAnimal(void);
public:
char *name;
int age;
};
//
MyAnimal *pDog = new MyAnimal("dog",1);
MyAnimal *pMonkey = new MyAnimal("monkey",2);
MyAnimal *pChicken = new MyAnimal("chicken",3);
vector<MyAnimal*> v;
v.push_back(pDog);
v.push_back(pMonkey);
v.push_back(pChicken);
delete pMonkey;//物理删除pMonkey所指的对象
v.erase(v.begin()+1);//将pMonkey的地址删除
vector<MyAnimal*>::iterator it = v.begin();
for (it; it != v.end(); ++it)
{
cout<<(*it)->name<<" "<<(*it)->age<<endl;
}
v.clear();//清空