今天写程序时发现,对于vector容器内元素是结构体时,迭代器的用法符合指针的用法
程序实例如下:
typedef struct tmpStruct
{
int x;
int y;
double dd;
}ts;
vector<ts> vect;
int i = 0;
for(; i<5; ++i)
{
ts vectTs;
vectTs.x = i;
vectTs.y = i+2;
vectTs.dd = (double)(i+3);
vect.push_back(vectTs);
}
vector<ts>::iterator itera = vect.begin();
for(; itera != vect.end(); ++itera)
{
//cout<<"("<<(*itera).x<<","<<(*itera).y<<","<<(*itera).dd<<")"<<endl; //(1)
cout<<"("<<itera->x<<","<<itera->y<<","<<itera->dd<<") "; //(2)
printf("%d/n", itera);
}
程序运行结果如下:
(0,2,3) 1244996
(1,3,4) 1244996
(2,4,5) 1244996
(3,5,6) 1244996
(4,6,7) 1244996
经过实验验证,上述程序的(1)句和(2)句的运行结果是一样的,都是能够正常编译且运行的。从(2)句可以看出,itera的用法完全就是指针的用法,即通过“->”来取特定的成员。同时,‘(*itera).x’的用法也表明了,指针解引用后,得到的是个实际的对象,并非指针,因为是用“.”来取元素的。
本例中仍用‘printf("%d/n", itera);’来打印itera的值。‘cout<<itera’仍和上次一样,编译没有通过。itera的值,也仍然没有变化,这一点,就不符合指针的概念了。
但从此例中可以学习到,如何用迭代器来读写容器内结构体元素的成员了。