容器vector的一些使用与迭代器
在公司类中的一些使用
上代码
这里只是简单探讨一下,没有完整代码,意会便可。
#include <vector>
......
int main()
{
vector<Employee> empvec;
Employee emp1;//初始化后的名字为"lihao"
empvec.push_back(emp1);//此处要调用复制构造函数
emp1.setName("hello");
empvec[0].displayInfo();//❶
emp1.displayInfo();//❷
return 0;
}
在这里,我们期望当我们改变emp1时,empvec[0]也会变,即我们希望empvec就是emp1。但由于要调用复制构造函数,push_back进去的并不是原来的emp1,而是一个新的Employee对象,从而无法实现以上期望。故❶❷的输出结果结果不同。
在容器vector中装入Employee本身并不能达到我们的目的,但我们可以装入Employee的指针来指向我们要改变emp1。于是就改为下面的样子
#include <vector>
......
int main()
{
vector<Employee*> empvec;
Employee emp1;
empvec.push_back(&emp1);
emp1.setName("hello");
empvec[0]->displayInfo();
emp1.displayInfo();
return 0;
}
那么在公司类中的员工类(基类)对象就可以用容器vector来创建动态向量,而不是用原来的Employee m_emps[5];固定数组。*
class Company{
private:
......
vector<Employee*> m_emps;
......
};
用vector可以随加随有,不会像固定数组哪样有限制。
迭代器
迭代器是面向对象版本的指针,它们提供了访问容器、序列中每个元素的方法。